什么&符号在Rust类型中意味着什么?

时间:2015-08-09 20:40:42

标签: variables syntax rust

我在Rust文档中看到过这段代码:

fn eat(&self) {
    println!("{} is done eating.", self.name);
}

&中的&self是什么意思?

2 个答案:

答案 0 :(得分:29)

这意味着您将引用传递给对象,而不是移动对象本身。如果你的功能看起来像是这样的话,那就很重要了:

fn eat(self) {
    println!("{} is done eating.", self.name);
}

然后您尝试使用该变量将其称为然后,您将收到错误

object = Foo::new();
object.eat();
object.something(); // error, because you moved object in eat

因为当您没有指定&时,生锈会将值移动到该函数中,并且您的原始绑定不再具有所有权。看看我创建的这个最小例子(playground version):

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
}

现在切换somethingeat之前调用。由于something只接受引用g仍然拥有所有权,您可以继续使用。另一方面eat移动g,您再也无法使用g

答案 1 :(得分:2)

答案在book:所有权/借款是生锈的关键特征之一。

尝试阅读这本书,真的值得花时间。