首页 文章

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

提问于
浏览
13

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

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

&self 中的 & 是什么意思?

2 回答

  • 26

    这意味着您将向对象传递 reference ,而不是移动对象本身 . 区分这一点很重要,因为如果你的函数看起来像:

    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
    }
    

    现在切换 something 被称为 before eat . 因为 something 仅接受引用, g 仍然拥有所有权,您可以继续 . 另一方面 eat 移动 g 并且您不再可以使用 g .

  • 3

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

    试着阅读这本书,真的值得花时间 .

相关问题