无法理解我做错了:
pub trait HasName {
fn name() -> String;
}
pub struct WorkerHandler<T: HasName> {
arg: T,
}
impl<T: HasName> WorkerHandler<T> {
pub fn run(arg: T) {
println!("{}", arg.name());
}
}
fn main() {}
Run Code Online (Sandbox Code Playgroud)
这会导致错误:
error: no method named `name` found for type `T` in the current scope
println!("{}", arg.name());
^~~~~~
Run Code Online (Sandbox Code Playgroud)
真正的情况是更复杂一点,但我想解释run的是T实现HasName特质.
因为您已经定义了关联的函数,而不是方法 - 没有self参数.
要么你想要
fn run(arg: T) {
println!("{}", T::name());
}
Run Code Online (Sandbox Code Playgroud)
或者你想要的
trait HasName {
fn name(&self) -> String;
}
Run Code Online (Sandbox Code Playgroud)
两者都是代表不同事物的有效概念.例如,关联函数对构造函数很有用.这个Default特征就是一个很好的例子.