合理选择协作策略,可以进一步提高多方法协作优化方法的优化特性。
这种多重方法又转为一个具有node-eval函数的访问者。
在Clojure中,多重方法是一种特殊的函数类型,它能将调用拆分为两个步骤。
最后,我们创建一个多重方法来处理求值,即eval-expr。
随后,我们利用defmethod为希望处理的每种类型创建多重方法的实现。
清单7是eval-concat多重方法的完整实现。
与Java访问者解决方案相似,我们可以利用一个多重方法(multimethod),为树中的每一个节点类型实现一个eval-concat操作。
该示例构建了一个小的节点树,随后对这些节点执行多重方法eval-concat,以查找字符串的concat。
多重方法由两个宏定义:defmulti和defmethod。
清单8是eval-concat多重方法的一个应用示例。