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 中那样进行某种结构解构?
目前您无法在特征中拥有关联字段,请参阅此 RFC。
但是,您可以向特征添加函数,就像您链接的示例中一样。但是,您可以忽略生命周期:
pub trait HasName {
fn name(&self) -> &str;
}
impl HasName for Entity {
fn name(&self) -> &str {
&self.name
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1676 次 |
| 最近记录: |