pub struct Entity {
name: String,
}
fn walk<T>(entity: T) {
eprintln!("{} walked", entity.name);
}
当前以下代码无法编译,因为类型T没有name
字段。
我知道铁锈有特质界限,是否有一些“田间界限”?
我真的必须:
trait HasName {}
impl HasName for Entity {}
fn walk<T: HasName>(entity: T) {
eprintln!("{}", entity.name);
}
哦,等等,那也不会编译!
Here's a working example
我的意思是,它必须比更简单。
也许像javascript中的某种结构分解?
答案 0 :(得分:3)
当前您无法在特征中关联字段,请参见this RFC。
但是,您可以将一个功能添加到特征中,就像在链接的示例中一样。但是,您可以取消生命周期:
pub trait HasName {
fn name(&self) -> &str;
}
impl HasName for Entity {
fn name(&self) -> &str {
&self.name
}
}