self 和 *self 有什么区别?

What's the difference between self and *self?

self*self 有什么区别?我们什么时候使用 *self?

在 Rust 中,impl 块中的 methods 可能(或可能不会)采用 接收器 参数:

impl MyStruct {
    fn my_func(&self, other_parameter: SomeType) -> ReturnType {
        //     ^^^^^ this is the receiver
        // ...
    }
}

接收器具有特殊名称 self,但在其他方面与普通函数参数非常相似。通过使用名为 self 的接收器,可以像这样调用该函数:my_value.my_func(arg) 作为 MyStruct::my_func(my_value, arg) 的语法糖。最常见的接收器类型是:

  • fn my_func(self, ...etc 按值获取类型并在调用时获取它的所有权。即self: MyStruct.
  • fn my_func(&self, ...etc 通过共享引用获取类型,不获取所有权。即self: &MyStruct
  • fn my_func(&mut self, ...etc 通过可变引用获取类型,不获取所有权。即self: &mut MyStruct.

还有其他接收器类型(例如 self: Box<Self>),但它们不太常见,我相信您可以自己查找它们。

所以当您看到 *self 时,它的意思只是取消引用函数签名中定义的 self 变量,就像您取消引用任何其他变量一样。 的区别是特殊名称 self 以及这意味着类型通常隐含在接收者语法中的事实。例如,如果函数采用 &self,那么 *self 只是 de-references 它返回到定义该方法的结构的 non-referenced 类型。


PS。以后在写问题的时候请在你的问题中给出一些示例代码,如果你指的是外部文档link到它。这将使人们更容易理解您的意思并迅速回答正确的问题。你写的问题不是很清楚(正如评论者所指出的)。