看这个示例代码
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();
}
不,特征函数不需要
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!