2017-06-17 140 views
1

我需要实现自定义assoc,但它不适用于多个参数。它只处理第一对。它似乎直接调用assoc,而不是通过core assoc,然后是RT/assoc。Clojure extend Assotiative arity

(def my-assoc (reify 
       clojure.lang.Associative 
        (assoc [_ k v] 
        (println "assoc!!" k v)))) 

(assoc my-assoc :a 2 :b 3) ;; prints only :a 2 

应该怎么做才能支持多元化?

回答

3

println返回零。所以返回原始值:

(def my-assoc (reify 
       clojure.lang.Associative 
       (assoc [m k v] 
        (println "assoc!!" k v) 
        m))) 

(assoc my-assoc :a 2 :b 3) ;; prints both 
+0

谢谢!完善! – uNmAnNeR

+0

如果你看[clojure.core/assoc'的源代码](https://github.com/clojure/clojure/blob/clojure-1.9.0-alpha14/src/clj/clojure/core.clj# L181),你会发现它为每个'kv'对级联调用'RT/assoc'。 – Thumbnail