trait函数中&self参数是必须的吗?

问题描述 投票:0回答:1

看这个示例代码

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
参数,但是无法得到pass编译器。

trait函数中&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();
}
rust traits
1个回答
2
投票

不,特征函数不需要

self
参数。但是,如果没有
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!
© www.soinside.com 2019 - 2024. All rights reserved.