在使用宏時,我已經達到了這個要求(我一直在努力避免它),在那裏我需要更新AST中保持一定條件的那些節點。舉例來說,假設我想更新的每個節點:什麼是更新不可變AST的最簡單方法?
Literal(Constant(1))
與價值:
Literal(Constant(2))
那些AST節點可能是表達式樹中的任何地方,所以我不能使用的ad-hoc模式匹配器。顯然,我想要做的最後一件事是編寫一個完整的模式匹配器,它能夠覆蓋所有的編譯器原語。我一直在尋找API,但我有一個印象,收集和可穿越家庭不夠好,以滿足我的需要,因爲他們把樹看作線性的東西,我希望整個更新樹作爲結果。那麼,是否有可能以智能的方式更新不可變表達式樹?爲什麼在標準API中不存在這樣的'更新'操作?
對於插件有一個TreeTransformer。我想,宏必須有一個類似的,可能甚至是相同的。 – pedrofurla 2012-07-09 15:17:40
也許你會想看看[拉鍊](http://anti-xml.org/zippers.html) – 2012-07-09 15:21:21
@NikitaVolkov,我想說,如果他沒有問宏的上下文。 – pedrofurla 2012-07-09 15:39:41