在使用宏时,我已经到了需要更新 AST 中保持特定条件的那些节点的地步(我一直在努力避免它)。例如,假设我想更新每个节点:
Literal(Constant(1))
价值:
Literal(Constant(2))
这些 AST 节点可能位于表达式树中的任何位置,因此我不能使用 ad-hoc 模式匹配器。显然,我想做的最后一件事是编写一个能够覆盖所有编译器原语的完整模式匹配器。我一直在API中搜索,但我的印象是collect和traversable family 之类的方法不足以满足我的需求,因为它们将树视为线性事物,因此我想要整个更新的树. 那么,是否有可能以一种智能的方式更新不可变的表达式树?为什么标准 API 中不存在这样的“更新”操作?