如何确保泛型类型具有特定字段

时间:2020-05-03 21:35:34

标签: generics rust

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中的某种结构分解?

1 个答案:

答案 0 :(得分:3)

当前您无法在特征中关联字段,请参见this RFC

但是,您可以将一个功能添加到特征中,就像在链接的示例中一样。但是,您可以取消生命周期:

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

impl HasName for Entity {
    fn name(&self) -> &str {
        &self.name
    }
}