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到它。这将使人们更容易理解您的意思并迅速回答正确的问题。你写的问题不是很清楚(正如评论者所指出的)。
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到它。这将使人们更容易理解您的意思并迅速回答正确的问题。你写的问题不是很清楚(正如评论者所指出的)。