rust - 是否有推荐的模式来找出对象的属性何时在 Rust 中更改?
问题描述
我有一个现有的 C# 应用程序,但由于多种原因,它的某些部分性能不佳。我想用 Rust 重写这些部分,并使用 P/Invoke 与我的新本机库进行交互。但是,我想知道的代码部分是使用INotifyPropertyChanged
or的部分Observable<T>
。
作为参考,INotifyPropertyChanged
是一种模式,其中实现该接口(特征)的类将在每次更改类的属性之一时触发一个事件(对象 x 上的属性“y”已更改),而不管是什么导致了更改(典型的例外是影响彼此值的属性,以避免堆栈溢出)。
对于我的特定用例,我试图从 C# 中跟踪存在于我的 Rust 代码中的树结构。如果这些更改通知能够冒泡到树的根部,那将是理想的(即,如果x.y[0].z
发生更改,则y[0]
触发一个事件,该事件被 看到x
,并x
触发一个事件)。
是否有推荐的模式来找出对象的属性何时在 Rust 中更改?例如,有没有办法知道何时借用结构的属性并触发回调?
我已经看到如何在 Rust 中实现观察者模式?,但接受的答案并没有完全解决我想知道的问题。
解决方案
是否有推荐的模式来找出对象的属性何时在 Rust 中更改?
不,Rust 语言中没有这样的东西。据我所知,完全无法判断一个字段何时发生变化。
您将需要围绕属性编写方法。这些方法可以在更新值时执行您需要的任何副作用:
trait Observer {
fn count_decreased(&mut self, example: &Example);
}
struct Example {
name: String,
count: u32,
}
impl Example {
fn decrease_count(&mut self, observer: Option<impl Observer>) {
self.count -= 1;
if let Some(mut observer) = observer {
observer.count_decreased(self);
}
}
}
可以编写一个程序宏来自动生成它的某些或所有方面,这似乎是非常合理的。
推荐阅读
- c# - 我们如何确保所有 NUnit [Test] 方法都是公开的?
- scripting - 如何仅在 Doxygen 中为与特定组标签相关的对象/类显示协作图
- python - 如何使用随机起点优化 Tensorflow 2.0 中的层权重
- kubernetes - kubectl get pods 不显示 READY-STATUS-RESTARTS
- forms - 行上的 Symfony 表单主题自定义属性
- google-cloud-platform - 谷歌 bigquery 将表导出到谷歌云存储中的多个文件,有时是一个文件
- plotly - 哪个图表/绘图插件比 ploty 更快?
- python - 如何将 DNF 表达式再次转换为正常的布尔表达式
- scikit-learn - 随机森林特征重要性显示列表中间全零的变量
- r - 将 lapply 与数据表一起使用