变量拥有其值,结构体拥有其字段。引用则允许访问由其他变量拥有的值,引用分为可变访问与不可变访问两类。引用在函数调用时被创建,函数也可以返回引用,此时可通过 ref 关键字创建引用绑定来捕获它。
约定 | 是否获得所有权 | 是否可变 | 典型用途 |
|---|---|---|---|
默认(不可变借用) | 否 | 否 | 只读访问,为默认行为 |
mut | 否 | 是 | 原地修改调用方的值 |
var | 是 | 是 | 需要一份本地可变副本或独占所有权 |
ref | 否(引用) | 跟随被引用值 | 返回或持有带有 origin 的引用 |
out | 是(成为该值) | 是 | 用于构造函数与具名结果 |
deinit | 是(消耗该值) | 是 | 用于析构函数与消耗式移动 |
未显式声明约定的参数,默认采用不可变只读借用;1.0 版本起该默认约定的关键字名为 imm,此前名为 read。Mojo 通过这种设计实现默认的值语义,同时作为系统语言仍保留对引用语义的完整控制。
^ 是唯一真正改变值归属的操作,复制不会改变所有权。引用绑定使用 ref 关键字创建,对引用绑定的读写会直接作用于被引用的对象,且引用绑定本身不能被重新赋值。