3

在 Scala 宏中,我想做这样的事情:

我有一个Tree(可能很大)。现在我想找到这棵树的一个具有某种具体形式的子树,例如Apply(_, _). 现在我想创建一个新树,它是原始树的副本,但是找到的子树被其他树替换。

有了这样的东西,我可以例如用调用一些其他方法来替换调用一些方法。

这样的事情可能吗?

4

2 回答 2

2

我对看到树转换的替代方法非常感兴趣,但是,它们还没有出现(实际上我们在这个方向上正在进行调查)。

为了同时完成任务,您可以扩展Transformer、覆盖其transform方法,然后针对您感兴趣的树的具体形式进行模式匹配。调用super.transform以递归替换子树。

于 2013-01-23T08:45:41.830 回答
1

是否可以???绝对是的

一般概念是“持久数据结构”。那些在新变体中尽可能“保留”原始价值的人。

说到树木,“拉链”的概念是适用的。它使您可以导航到图形结构,同时维护允许重建新值的数据结构,该新值与原始模数最大程度地共享您为创建新变体而应用的更改。

看看这个。可以找到许多参考资料以及实现,包括 ScalaZ。

于 2013-01-23T04:56:17.293 回答