pub struct Entity {
name: String,
}
fn walk<T>(entity: T) {
eprintln!("{} walked", entity.name);
}
目前以下代码无法编译,因为类型 T 没有 name
字段。
我知道 Rust 中存在特征限制,是否有一些“字段限制”?
我真的必须这样做吗:
trait HasName {}
impl HasName for Entity {}
fn walk<T: HasName>(entity: T) {
eprintln!("{}", entity.name);
}
哦等等,这也无法编译!
Here's a working example
我的意思是,一定有比那个更简单的东西。
也许像 JavaScript 中那样进行某种结构解构?
最佳答案
目前您无法在特征中拥有关联字段,请参阅this RFC .
但是,您可以向特征添加函数,就像您链接的示例一样。但是,您可以忽略生命周期:
pub trait HasName {
fn name(&self) -> &str;
}
impl HasName for Entity {
fn name(&self) -> &str {
&self.name
}
}
关于generics - 如何确保泛型类型具有某个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61581929/