推荐答案
在 Rust 中,self、&self 和 &mut self 是方法签名中用于表示方法接收者的不同形式。它们的区别如下:
self:表示方法获取了对象的所有权。调用该方法后,对象将被移动,调用者将无法再使用该对象。&self:表示方法以不可变引用的方式借用对象。调用该方法后,对象仍然可用,但只能以只读方式访问。&mut self:表示方法以可变引用的方式借用对象。调用该方法后,对象仍然可用,并且可以对其进行修改。
本题详细解读
self
当方法签名中使用 self 时,表示该方法获取了对象的所有权。这意味着在调用该方法后,对象将被移动,调用者将无法再使用该对象。例如:
// www.javascriptcn.com code example
struct MyStruct;
impl MyStruct {
fn consume(self) {
// 该方法获取了对象的所有权
}
}
fn main() {
let instance = MyStruct;
instance.consume(); // 调用后,instance 被移动
// instance 不能再使用
}&self
当方法签名中使用 &self 时,表示该方法以不可变引用的方式借用对象。这意味着在调用该方法后,对象仍然可用,但只能以只读方式访问。例如:
// www.javascriptcn.com code example
struct MyStruct;
impl MyStruct {
fn read(&self) {
// 该方法以不可变引用的方式借用对象
}
}
fn main() {
let instance = MyStruct;
instance.read(); // 调用后,instance 仍然可用
// instance 可以继续使用,但不能修改
}&mut self
当方法签名中使用 &mut self 时,表示该方法以可变引用的方式借用对象。这意味着在调用该方法后,对象仍然可用,并且可以对其进行修改。例如:
// www.javascriptcn.com code example
struct MyStruct;
impl MyStruct {
fn modify(&mut self) {
// 该方法以可变引用的方式借用对象
}
}
fn main() {
let mut instance = MyStruct;
instance.modify(); // 调用后,instance 仍然可用,并且可以修改
// instance 可以继续使用,并且可以修改
}总结
self:获取对象的所有权,调用后对象被移动。&self:以不可变引用的方式借用对象,调用后对象仍然可用,但只能读取。&mut self:以可变引用的方式借用对象,调用后对象仍然可用,并且可以修改。