gpt4 book ai didi

struct - 在 Rust 中拥有多个具有相同属性的结构的惯用方法是什么?

转载 作者:行者123 更新时间:2023-12-03 11:29:50 25 4
gpt4 key购买 nike

我知道 Rust 没有继承,并且该语言提供了一种简单的方法来通过使用 Traits 在对象之间共享相同方法的不同实现。但是是否有一种惯用的方式来共享属性名称定义,或者是否需要在每个结构上定义它们?
我的用例是我有许多不同的结构来跟踪一些信息。每条信息都可以更新,我希望每个结构都知道其上次更新的日期。是否有一个共同的模式(可能是宏?)来添加 last_update属性到所有结构还是必须明确地将其添加到每个结构中?

最佳答案

目前还没有办法通过特征来做到这一点,最接近的是“特征中的字段”RFC( discussionRFC ),但目前看来还不是很活跃。
最简单的方法是拥有一个带有方法的类型/结构,并将该字段包含在您想要的任何结构中:

struct UpdateTimestamp {
timestamp: Timestamp, // dummy type
}

impl UpdateTimestamp {
fn update(&mut self) {
self.timestamp = now(); // dummy function
}
fn last_updated(&self) -> Timestamp {
self.timestamp
}
}
然后,您可以将其包含在您想要该功能的任何结构中:
struct MyStruct {
my_field: u32,
my_other_field: i32,
update_ts: UpdateTimestamp,
}

impl MyStruct {
fn my_field(&self) -> u32 {
// Getter - no update
self.my_field
}
fn set_my_field(&mut self, my_field: u32) {
self.update_ts.update();
self.my_field = my_field;
}
fn last_updated(&self) -> Timestamp {
self.update_ts.last_updated()
}
}
现在你可以为此编写一个复杂的宏来自动化实现部分(将更新注入(inject)到 setter 和 impl block 中的 last_updated 方法中),但除非你经常这样做,否则我认为这不值得它。

关于struct - 在 Rust 中拥有多个具有相同属性的结构的惯用方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63407245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com