[英]What does the ampersand mean in a Rust type?
我在Rust文档中看到过这段代码:
fn eat(&self) {
println!("{} is done eating.", self.name);
}
什么是&
in &self
意味着什么?
这意味着您将传入对象的引用 ,而不是移动对象本身。 区分这一点很重要,因为如果你的函数看起来像:
fn eat(self) {
println!("{} is done eating.", self.name);
}
然后你尝试调用它然后使用变量,你会收到一个错误
object = Foo::new();
object.eat();
object.something(); // error, because you moved object in eat
因为当你没有指定&
,rust会将值移动到函数中,并且原始绑定不再具有所有权。 看看我创建的这个最小的例子( 游乐场版 ):
struct Foo {
x : u32
}
impl Foo {
fn eat(self) {
println!("eating");
}
fn something(&self) {
println!("else");
}
}
fn main() {
println!("Hello, world!");
let g = Foo { x: 5 };
g.eat();
g.something(); // if this comes before eat, no errors because we arent moving
}
现在切换something
之前,被称为eat
。 因为something
只需要参考 , g
仍然拥有所有权,你可以继续。 eat
另一方面移动g
,你不再可以使用g
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.