我(defmulti multi (fn [t] (cond (seq? t) :seq (map? t) :map (vec? t) :vec ...
在这里和那里阅读了很多 Clojure 代码中的模式,这基本上是一个开关(如果我添加一个类型,我必须添加一个新子句)但更冗长。有没有办法说(defmethod seq, (defmethod vec (defmethod map..
等?这一定是一件很平常的事情。我知道可以手动定义层次结构,但是常见的 Clojure 类型,如序列、向量、映射......是否必须为每个在 type 上调度的程序定义它们?请告诉我我是如何错过重点的!
编辑:好的,我想我可以说(defmulti mymulti type)
然后(defmethod clojure.lang.PeristantSomething...
等等,但这很笨拙,因为它指的是java类,但我想指的是“类型”的一些质量,比如它是顺序的还是关联的