https://www.modular.com/get-started
与python基础语法很相似。
下面是一个基本的函数:
fn add(x: Int, y: Int) -> Int:
return x + y
请注意,上面的add()
不会修改x
or y
,它只会读取值。事实上,正如所写的,函数无法修改它们,因为默认情况下fn
参数是不可变的引用。
就参数约定而言,这称为“借用”,尽管这是函数的默认设置fn
,但您可以使用borrowed如下声明将其明确化(其行为与直接使用add()
完全相同):
fn add(borrowed x: Int, borrowed y: Int) -> Int:
return x + y
如果您希望参数可变,则需要声明参数约定为inout
。这意味着对函数内部参数所做的更改在函数外部可见。
例如,该函数可以修改原始变量:
fn add_inout(inout x: Int, inout y: Int) -> Int:
x += 1
y += 1
return x + y
var a = 1
var b = 2
c = add_inout(a, b)
print(a)
print(b)
print(c)
2
3
5
另一种选择是将参数声明为owned
,这为函数提供了该值的完全所有权(它是可变的并保证唯一)。这样,函数可以修改值,而不用担心影响函数外部的变量。例如:
fn set_fire(owned text: String) -> String:
text += "🔥"
return text
fn mojo():
let a: String = "mojo"
let b = set_fire(a)
print(a)
print(b)
mojo()
mojo
mojo🔥
在这种情况下,Mojo 会复制一份a
并将其作为text参数传递。原来的a
字符串仍然存在且完好。
总结:
borrowed
为默认,参数不可变
inout
参数可变
owned
参数可变,保留原参数
Mojo 中struct
与 Python 中class
类似:它们都支持方法、字段、运算符重载、元编程装饰器等。
The Mojo🔥 SDK coming to your desktop soon!
九月初Mojo应该可以脱离playground在本地执行,目前已加入白名单,等待中。