2017-06-17 82 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