我对 sml(1 个月)和 clojure(1 周)都是新手。几周前我在 sml 中学习了数据类型和模式匹配,想知道 clojure 中是否有类似的东西。那里似乎有几个模式匹配库。它们是否具有 ML 模式匹配的全部功能?数据类型如何?我是否必须使用 deftype 之类的东西来创建自己的数据类型?如果是这样,我该怎么做?deftype 对我来说看起来很复杂。
如果人们在 lisp 世界中不使用数据类型,那么在 clojure 中使用数据类型进行模式匹配的惯用方法是什么?
我对 sml(1 个月)和 clojure(1 周)都是新手。几周前我在 sml 中学习了数据类型和模式匹配,想知道 clojure 中是否有类似的东西。那里似乎有几个模式匹配库。它们是否具有 ML 模式匹配的全部功能?数据类型如何?我是否必须使用 deftype 之类的东西来创建自己的数据类型?如果是这样,我该怎么做?deftype 对我来说看起来很复杂。
如果人们在 lisp 世界中不使用数据类型,那么在 clojure 中使用数据类型进行模式匹配的惯用方法是什么?
在 Clojure 世界中,您可以使用一些用于多态性的“点菜”选项:
deftype
不同的数据类型可能意味着用或定义的 Java 类或 Clojure 类型defrecord
。至于定义自己的数据类型:
defrecord
而不是deftype
在大多数情况下:defrecord 创建一些行为类似于 hashmap 的东西,因此它非常灵活且用户友好。对于编写库和编译器等的人来说,deftype 更像是一种低级构造。