2024年Clojure调查中分享您的想法!

欢迎!请查看关于页面以了解如何工作的更多信息。

0
多方法

多亏了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一起工作?

谢谢!

1 个答案

+1

不,这并不是我期望在Clojure中看到的功能。我不理解为什么在ClojureScript中这样是有用的?

在我的情况下,这是一个基于调度器的UI组件库(类似于reagent)。在初始化时,将实例化一个支持多项协议的记录,例如IDeref用于状态,IMultiFn通过defmethod添加UI组件函数。
...