如何确保泛型类型具有某个字段

Sof*_*fle 2 generics rust

pub struct Entity {
    name: String,
}

fn walk<T>(entity: T) {
    eprintln!("{} walked", entity.name);
}
Run Code Online (Sandbox Code Playgroud)

目前以下代码无法编译,因为类型 T 没有字段name
我知道 Rust 有特征限制,是否有一些“字段限制”?

我真的必须:

trait HasName {}
impl HasName for Entity {}
fn walk<T: HasName>(entity: T) {
    eprintln!("{}", entity.name);
}
Run Code Online (Sandbox Code Playgroud)

哦等等,这也无法编译!
这是一个工作示例

我的意思是,一定有比更简单的事情。
也许像 JavaScript 中那样进行某种结构解构?

Hol*_*bor 5

目前您无法在特征中拥有关联字段,请参阅此 RFC

但是,您可以向特征添加函数,就像您链接的示例中一样。但是,您可以忽略生命周期:

pub trait HasName {
    fn name(&self) -> &str;
}

impl HasName for Entity {
    fn name(&self) -> &str {
        &self.name
    }
}
Run Code Online (Sandbox Code Playgroud)