方法接收者
上面的“&self”表明该方法以不可变的方式借用了对象。还有其他可能的方法接收器:
- “&self”:使用不可变的共享引用从调用方借用对象。之后可以再次使用该对象。
- “&mut self”:使用唯一的可变引用从调用方借用对象。之后可以再次使用该对象。
- “self”:获取对象的所有权并将其从调用方移出。该方法会成为对象的所有者。除非明确转移对象的所有权,否则在该方法返回时,对象将被丢弃(取消分配)。具备完全所有权,不自动等同于具备可变性。
- “mut self”:同上,但该方法可以改变对象。
- 无接收器:这将变为结构体上的静态方法。通常用于创建构造函数,按惯例被称为“new”。
Beyond variants on self
, there are also special wrapper types allowed to be receiver types, such as Box<Self>
.
建议强调“共享且不可变”和“唯一且可变”。由于借用检查器规则的原因,这些约束在 Rust 中总是一起出现,而“self”也不例外。您无法从多个位置引用结构体并对其调用一项改变(“&mut self”)方法。