多亏了CLJS中的IMultiFn
,类型和记录可以轻松扩展以作为多方法的行为。例如
`
(defrecord MyMulti
[add-method remove-method dispatch-fn method-table]
IMultiFn
(-add-method [_ dispatch-val f]
(add-method dispatch-val f))
(-remove-method [_ dispatch-val]
(remove-method dispatch-val))
(-methods [_] @method-table))
(def my-multi (->MyMulti ...))
(defmethod my-multi :foo
[x]
...)
`
Clojure中这不是那么容易,因为多方法不是通过协议实现的。有没有任何方法可以使记录或类型与CLJ中的defmethod一起工作?
谢谢!