我的 Clojure 应用程序中有一个名为“visualize”的方法,它可以渲染我的应用程序的任何部分。我的问题是我的应用程序中有些东西是 Java 类,有些是哈希图,字段内部使用 clojure::idiom 标记 map 的类型。我知道我可以使用 multimaps 来分派(dispatch)类型或某些内部类型,但是我怎么做才能使相同的多方法同时适用于两者。
最佳答案
创建一个调度函数,该函数既查找具有特殊标记类型的映射,又查找 Java 类。
(defn visualize-dispatch [foo]
(if (map? foo)
(:type foo)
(class foo)))
(defmulti visualize visualize-dispatch)
(defmethod visualize String [s]
(println "Got a string" s))
(defmethod visualize :banana [b]
(println "Got a banana that is" (:val b)))
然后,您可以使用其中一个 Java 类或像 {:type :banana :val "something"} 这样的 map 调用可视化。
user> (visualize "bikini")
Got a string bikini
user> (visualize {:type :banana :val "speckled"})
Got a banana that is speckled
关于clojure - 我可以在 Clojure 中对 Type AND 属性发送多方法吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4577776/