我希望能够采用多方法,将其克隆为单独的变量并添加到它而不更改原始方法。怎么办呢?
(defmulti hello :type)
(defmethod hello :a
[e] (assoc e :a 1))
(hello {:type :a})
=> {:type :a :a 1}
;; my attempt at cloning
(def world @#'hello)
(defmethod world :b
[e] (assoc e :b 2))
(world {:type :b})
=> {:type :b :b 2}
;; I want this to throw... but because `hello` and `world`
;; are the same function, it still works
(hello {:type :b})
=> {:type :b :b 2}
答案 0 :(得分:2)
通过查看https://github.com/clojure/clojure/blob/master/src/clj/clojure/core.clj#L1769-L1777:
来计算出来df = pd.DataFrame.groupby(['year','cntry', 'state']).agg(['size','sum'])
----回到原来的问题----
(defn clone
[multi name]
(let [table (.getMethodTable multi)
clone (clojure.lang.MultiFn. name
(.dispatchFn multi)
(.defaultDispatchVal multi)
(.hierarchy multi)]
(doseq [[dispatch-val method] table]
(.addMethod clone dispatch-val method))
clone))