【发布时间】:2014-08-28 10:54:59
【问题描述】:
假设我们有一个多方法foo。它有几个实现。假设当foo 的参数是包含字符\r 的字符串时调用其中一个,而当foo 的参数是包含字符\! 的字符串时执行另一个。伪代码:
(defmulti foo ???) ; can't come up with function..
(defmethod foo \r [_]
(println "one"))
(defmethod foo \! [_]
(println "two"))
所以当我们这样调用我们的函数时:
(foo "right!") ;; desired output:
one
two
;; => nil
这里重要的是支持的方法列表不应该是死板的,而是可以扩展的,所以以后可以添加新的方法而不用接触原始代码。
虽然最近几天我的 Clojure 技能有了显着提高,但我仍然缺乏经验。我最好的想法是保留一张带有“字符 - 功能”对的地图,然后手动遍历它并执行正确的功能。在这种情况下,我还需要一些接口来注册新功能等。什么是惯用的解决方案?
【问题讨论】:
标签: clojure multimethod