假设我有一堆 Clojure 数据结构,它们都是相同的类型——例如 defrecord 定义的对象类型。
在这些结构中获得多态行为的最佳方式是什么?
在结构中嵌入一个函数是否是一个好习惯,这样我就可以做类似的事情:
((:my-method my-object) param1 param2)
或者有更好的方法吗?
最佳答案
您可以使用多种方法进行调度,
(derive ::subtype ::type)
然后你可以根据类型分派(dispatch)
(defmulti my-method
(fn [type] ((meta type) :type)))
(defmethod my-method ::subtype []
;;stuff...
)
您需要在创建对象时将 :type 添加到对象元数据中,
(with-meta [1 2 3] {:type ::subtype})
或者我还没有尝试过,但是由于协议(protocol)和记录在后台创建了 Java 类,您可以根据该名称进行分派(dispatch)。
关于data-structures - Clojure 中的多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3276370/