无法理解我做错了:
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() {}
这会导致错误:
error: no method named `name` found for type `T` in the current scope
println!("{}", arg.name());
^~~~~~
真实案例有点复杂,但我希望向run
解释T
实现HasName
特征。
答案 0 :(得分:7)
因为您已经定义了关联函数而不是方法 - 所以没有self
参数。
要么
fn run(arg: T) {
println!("{}", T::name());
}
或者你想要
trait HasName {
fn name(&self) -> String;
}
两者都是代表不同事物的有效概念。例如,关联函数对构造函数很有用。 Default
trait就是一个很好的例子。
答案 1 :(得分:2)
您的name
方法需要self
参数:
pub trait HasName {
fn name(&self) -> String;
}