我希望编写一个算法来同步两个层次结构。这些结构可以是对象图、存储在关系数据库表中的数据等(甚至是两种不同的结构,只要它们具有可比较的键)。同步将是单向的,即,一个结构将是原型,而另一个将被修改以匹配。
假设我们有一个sync
函数。它需要接受以下内容:
objA
- 原型objB
-- 要修改的对象keyA
-- 密钥生成函数objA
keyB
-- 密钥生成函数objB
addB
-- 创建一个函数objB
(返回新的 idobjB
)setB
-- 更新函数objB
remB
-- 删除一个函数objB
parB
-- 父级的 idobjB
-- 传递给addB
上下文
所以我们有这个:
let sync (objA:'a) (objB:'b) (keyA:'a -> 'k) (keyB:'b -> 'k)
(addB:'p * 'a -> 'p) (setB:'a * 'b -> unit) (remB:'b -> unit)
(parB:'p) = ...
现在这就是我遇到麻烦的地方。'a
并且'b
是分层的,因此该函数需要知道它应该遍历哪些属性(一旦它比较它们的键'a
并'b
确定它们到目前为止匹配并且应该进一步遍历)。对于这些“子”属性,它需要传递给同步的所有相同参数,但它们各自的类型。
这是当它变得很明显这是一个数据结构问题的时候。如何将这些信息链接在一起,以便可以将根对象传递给sync
它并向下遍历图形?我最初的想法是将所有参数合并到一个类中,该类将具有子属性(ResizeArray
相同类型的)。但是对于具有不同类型的各种属性,我想不出一种方法来使它工作,除了将类型扔出窗外并制作大部分或全部类型参数obj
。
所以这是我的问题:
- 是否有一种行之有效的方法来做到这一点(我还没有找到任何东西)
- 我可以使用什么数据结构来封装完成这项工作所需的数据?
我已尽力彻底解释这一点,但如果有任何不清楚的地方,请询问,我会尽力提供更好的信息。