在斯卡拉宏,我想做的事情是这样的:
我有一个Tree
(可能很大)。 现在我想找到这棵树有一些具体形式的子树,如Apply(_, _)
现在我想创建一个新的树,它是原始树的副本,但发现树被一些其他的树所取代。
像这样的东西,我可以举例来说与其他方法的调用替换一些方法的调用。
是这样的可能吗?
在斯卡拉宏,我想做的事情是这样的:
我有一个Tree
(可能很大)。 现在我想找到这棵树有一些具体形式的子树,如Apply(_, _)
现在我想创建一个新的树,它是原始树的副本,但发现树被一些其他的树所取代。
像这样的东西,我可以举例来说与其他方法的调用替换一些方法的调用。
是这样的可能吗?
我在看到其他办法,树转型很感兴趣,不过,他们还没有到达(我们确实有在这个方向上正在进行的调查)。
为了让事情的同时完成的,可以延长Transformer
,覆盖其transform
对你有兴趣的树的具体形式,方法,然后模式匹配,调用super.transform
在子树递归取代。
可能吗??? 明确是的 !
一般的概念是“持久数据结构。” 那些“坚持”尽可能原始值的新变种。
当涉及到树木,“拉链”的概念是适用的。 它可以让你浏览到一个图形结构,同时保持数据结构,允许以原模已应用创造新变种的变化最大共享一个新的价值的重建。
看看这个。 许多文献可以发现,以及实现,包括ScalaZ。