f# - 使用 F# 记录对象更改的方法

标签 f#

有没有一种聪明的方法来记录对 F# 中的对象所做的更改?

我一直在研究 F# 作为构建通过网络复制自身的对象模型的一种方式。我需要解决的一项任务是如何检测对对象所做的更改,以便我只能将更改发送给客户端

注意:我正在寻找“实现 INotifyPropertyChanged”或“做一些可以在 C# 中轻松完成的事情”以外的答案。如果这是在 F# 中解决问题的唯一方法,那么 F# 不是我正在寻找的工具。

为什么是 F#?因为我对在 C# 中实现这种状态观察者模式的方式并不满意。因此,我正在研究是否有一些优雅的方式以动态语言实现它,从 F# 开始。

最佳答案

您可以使类不可变(例如,使用记录和联合等标准不可变类型,或使对象仅包含不可变内容),而不是在发生更改时检测和通知更改。然后,您可以编写一个函数来“区分”一个类的两个实例,并让一些代理按计划或基于某个触发器查找更改并将差异发送到另一端。

因为数据是不可变的,代理只需要保留一个指向它上次发送的版本的指针。 diffing 函数本身可以为每个类手动编写,这将允许考虑数据属性的有效实现,或者您可以使用反射编写通用函数。

关于f# - 使用 F# 记录对象更改的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3429551/

相关文章:

for-loop - 避免 F# 中的 for 循环

f# - F#中的Seq.unfold解释

F# 使用 IDictionaryEnumerator

f# - ServiceStack.OrmLite 自动增量不适用于 F#

visual-studio - Visual Studio for F# 中的代码折叠

f# - Seq.groupBy 是否保留组内的顺序?

visual-studio - 在 F# Interactive 上运行 F# 测试

c# - F#:连接到 Azure SQL 数据库?

visual-studio-2010 - F# 的格式化文档

asp.net - F# 中的 SignalR 和 SelfHost