我的 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/

10-16 12:51