3

我的 Clojure 应用程序中有一个名为“visualize”的方法,据说它可以渲染我的应用程序的任何部分。我遇到的问题是我的应用程序中的某些东西是 Java 类,而有些是哈希映射,其字段内部使用 clojure :: idiom 标记映射的类型。我知道我可以使用多映射在类型或某些内部类型上进行调度,但我该如何做到这一点,以便相同的多方法同时适用于两者。

4

1 回答 1

5

创建一个调度函数,它既可以查找具有特殊标记类型的映射,也可以查找 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"} 这样的映射调用可视化。

user> (visualize "bikini")
Got a string bikini
user> (visualize {:type :banana :val "speckled"})
Got a banana that is speckled
于 2011-01-02T15:28:09.920 回答