data-structures - Clojure 中的多态性

标签 data-structures object clojure oop polymorphism

假设我有一堆 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/

相关文章:

c - 解释数据结构中以下 return 语句的最佳方法是什么?

algorithm - 回溯与动态规划的区别

javascript - 创建对象时了解 JavaScript 中 'this' 的位置

clojure - 重新实现 clojure 的惰性序列

post - 无法在 Clojure 中完成 POST 请求

python - 实现动态多时间线队列

algorithm - 部分多键映射的数据结构?

javascript - JS/Nodejs 无法访问对象的引用索引

java - 当我从另一个类调用对象时出现错误,即 "cannot find symbol"

clojure - 如何从 Clojure 错误中获得更好的反馈?