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

皮特

我知道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()
    }
}

现在您可以为此编写一个复杂的宏,该宏可以自动化实现部分(将更新注入到setl和last_updatedimpl块中方法中),但是除非您做了很多,否则我认为这样做是不值得的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在具有某些相同属性的层次结构中处理不同类的最有效方法是什么

来自分类Dev

在matplotlib中绘制具有相同属性的多个函数

来自分类Dev

为什么具有相同属性的两个对象不能以相同的方式工作

来自分类Dev

如何添加具有相同属性的多个UIImageViews

来自分类Dev

表单字段注入具有相同属性名称的多个bean中

来自分类Dev

调用带有多个参数的函数的惯用方式是什么?

来自分类Dev

调用带有多个参数的函数的惯用方式是什么?

来自分类Dev

结构概念中具有相同类型的多个属性

来自分类Dev

使用Kefir的具有多个事件的属性变异的惯用方式

来自分类Dev

在Scala的构造函数中扩展具有隐式参数的类的惯用方式是什么?

来自分类Dev

GraphViz文件中具有相同属性的节点组

来自分类Dev

具有多个具有相同属性名称的模型属性的Spring表单路径

来自分类Dev

从列表生成具有相同属性的对

来自分类Dev

具有几乎相同属性的模型

来自分类Dev

创建具有相同属性的方法

来自分类Dev

合并具有相同属性的元素

来自分类Dev

两个具有相同属性实现方式但原型不同的javascript对象

来自分类Dev

当我有许多具有相同属性的类,但它们在 Load 和 Refresh 等方法上有所不同时,正确的方法是什么?

来自分类Dev

有什么方法可以创建与父窗口具有相同属性的子窗口?

来自分类Dev

C#JSON-序列化具有相同属性的不同类型的多个对象

来自分类Dev

创建具有不同属性的相同类的多个bean的最简单方法

来自分类Dev

对具有相同属性名称的多个模型进行不干扰的验证

来自分类Dev

在Rust中打印用空格分隔的迭代器的惯用方式是什么?

来自分类Dev

在稳定的Rust中为大量数组实现特征的惯用方式是什么?

来自分类Dev

返回Cypher中具有相同属性B的节点的属性A的总和

来自分类Dev

如何删除所有具有相同属性值但NSMutableArray中的对象的对象

来自分类Dev

将属性从多个对象映射到具有相同属性名称的单个对象的有效方法

来自分类Dev

从多个来源收集数据的惯用方式是什么?

来自分类Dev

在Neo4J中查找具有相同属性的节点

Related 相关文章

  1. 1

    在具有某些相同属性的层次结构中处理不同类的最有效方法是什么

  2. 2

    在matplotlib中绘制具有相同属性的多个函数

  3. 3

    为什么具有相同属性的两个对象不能以相同的方式工作

  4. 4

    如何添加具有相同属性的多个UIImageViews

  5. 5

    表单字段注入具有相同属性名称的多个bean中

  6. 6

    调用带有多个参数的函数的惯用方式是什么?

  7. 7

    调用带有多个参数的函数的惯用方式是什么?

  8. 8

    结构概念中具有相同类型的多个属性

  9. 9

    使用Kefir的具有多个事件的属性变异的惯用方式

  10. 10

    在Scala的构造函数中扩展具有隐式参数的类的惯用方式是什么?

  11. 11

    GraphViz文件中具有相同属性的节点组

  12. 12

    具有多个具有相同属性名称的模型属性的Spring表单路径

  13. 13

    从列表生成具有相同属性的对

  14. 14

    具有几乎相同属性的模型

  15. 15

    创建具有相同属性的方法

  16. 16

    合并具有相同属性的元素

  17. 17

    两个具有相同属性实现方式但原型不同的javascript对象

  18. 18

    当我有许多具有相同属性的类,但它们在 Load 和 Refresh 等方法上有所不同时,正确的方法是什么?

  19. 19

    有什么方法可以创建与父窗口具有相同属性的子窗口?

  20. 20

    C#JSON-序列化具有相同属性的不同类型的多个对象

  21. 21

    创建具有不同属性的相同类的多个bean的最简单方法

  22. 22

    对具有相同属性名称的多个模型进行不干扰的验证

  23. 23

    在Rust中打印用空格分隔的迭代器的惯用方式是什么?

  24. 24

    在稳定的Rust中为大量数组实现特征的惯用方式是什么?

  25. 25

    返回Cypher中具有相同属性B的节点的属性A的总和

  26. 26

    如何删除所有具有相同属性值但NSMutableArray中的对象的对象

  27. 27

    将属性从多个对象映射到具有相同属性名称的单个对象的有效方法

  28. 28

    从多个来源收集数据的惯用方式是什么?

  29. 29

    在Neo4J中查找具有相同属性的节点

热门标签

归档