代码之家  ›  专栏  ›  技术社区  ›  curlywei

&self参数在特质的功能中是必要的吗?

  •  1
  • curlywei  · 技术社区  · 3 年前

    查看此示例代码

    trait Animal {
        fn make_sound(&self);
    }
    
    struct Dog;
    impl Animal for Dog {
        fn make_sound(&self) {
            println!("Woof!");
        }
    }
    
    struct Cat;
    impl Animal for Cat {
        fn make_sound(&self) {
            println!("Meow!");
        }
    }
    
    fn main() {
        let dog = Dog;
        let cat = Cat;
        dog.make_sound();
        cat.make_sound();
    }
    
    

    函数(方法) make_sound() 只是打印一个字符串。

    我检查了这个功能的内容, make_sound() 似乎没有调用的任何信息 Cat 结构。

    所以我试着把 &self 参数,但无法获取传递编译器。

    是&特质功能中的自我必要性?为什么?

    或者我的理解哪里错了?

    编辑:添加无法获得传递编译器的代码

    trait Animal {
        fn make_sound();
    }
    
    struct Dog;
    impl Animal for Dog {
        fn make_sound() {
            println!("Woof!");
        }
    }
    
    struct Cat;
    impl Animal for Cat {
        fn make_sound() {
            println!("Meow!");
        }
    }
    
    fn main() {
        let dog = Dog;
        let cat = Cat;
        dog.make_sound();
        cat.make_sound();
    }
    
    1 回复  |  直到 3 年前
        1
  •  3
  •   kmdreko    3 年前

    不,一个 self 特征函数不需要参数。但是,如果没有 自己 参数,不能使用 obj.func() 语法,因为没有要提供的实例。你必须这样做 Type::func() :

    trait Animal {
        fn make_sound();
    }
    
    struct Dog;
    impl Animal for Dog {
        fn make_sound() {
            println!("Woof!");
        }
    }
    
    struct Cat;
    impl Animal for Cat {
        fn make_sound() {
            println!("Meow!");
        }
    }
    
    fn main() {
        Dog::make_sound();
        Cat::make_sound();
    }
    
    Woof!
    Meow!
    
    推荐文章