我只是实现了一个简单的特征来保存结构属性的历史:
fn main() {
let mut weight = Weight::new(2);
weight.set(3);
weight.set(5);
println!("Current weight: {}. History: {:?}", weight.value, weight.history);
}
trait History<T: Copy> {
fn set(&mut self, value: T);
fn history(&self) -> &Vec<T>;
}
impl History<u32> for Weight {
fn set(&mut self, value: u32) {
self.history.push(self.value);
self.value = value;
}
fn history(&self) -> &Vec<u32> {
&self.history
}
}
pub struct Weight {
value: u32,
history: Vec<u32>,
}
impl Weight {
fn new(value: u32) -> Weight {
Weight {
value,
history: Vec::new(),
}
}
}
我不认为这是可能的,但是你可以将 History
特征(或类似的东西)添加到还没有 history
属性的东西中吗(像 u32
或 String
), 有效地附加一些关于变量取值的信息?
最佳答案
没有。 Traits 不能将数据成员添加到现有结构中。实际上,只有程序员可以通过修改结构的定义来做到这一点。包装结构或哈希表是可行的方法。
关于rust - 我可以在 Rust 中实现将信息添加到外部类型的特征吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47364211/