Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何基于接口而不是类的存在来调用Clojure多方法?_Clojure - Fatal编程技术网

如何基于接口而不是类的存在来调用Clojure多方法?

如何基于接口而不是类的存在来调用Clojure多方法?,clojure,Clojure,我知道多方法通常是基于类的调度,但是有没有一种方法可以基于实现的接口进行调度呢 多方法允许您指定自己的分派函数。因此,您可以基于任何谓词进行调度!以下代码基于参数实现的接口进行调度: (defmulti process-collection (fn [arg1 & _] (cond (instance? java.util.List arg1) :list (instance? java.util.Set arg1) :set :else

我知道多方法通常是基于类的调度,但是有没有一种方法可以基于实现的接口进行调度呢

多方法允许您指定自己的分派函数。因此,您可以基于任何谓词进行调度!以下代码基于参数实现的接口进行调度:

(defmulti process-collection
  (fn [arg1 & _]
    (cond
      (instance? java.util.List arg1) :list
      (instance? java.util.Set arg1) :set
      :else :coll)))

(defmethod process-collection :list
  [list-to-process]
  ())

(defmethod process-collection :set
  [set-to-process]
  ())

(defmethod process-collection :coll
  [coll-to-process]
  ())