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:不同类类型上的defmulti_Clojure_Signature_Method Signature_Multimethod - Fatal编程技术网

Clojure:不同类类型上的defmulti

Clojure:不同类类型上的defmulti,clojure,signature,method-signature,multimethod,Clojure,Signature,Method Signature,Multimethod,快速提出clojure问题,我认为这主要与语法有关。如何基于参数的特定类型签名分派multimethod,例如: (defn foo ([String a String b] (println a b)) ([Long a Long b] (println (+ a b)) ([String a Long b] (println a (str b)))) 我想把它扩展到任意的东西,比如两个字符串后跟一个映射,映射后跟一个double,两个double后跟一个IF

快速提出clojure问题,我认为这主要与语法有关。如何基于参数的特定类型签名分派multimethod,例如:

(defn foo 
     ([String a String b] (println a b))
     ([Long a Long b] (println (+ a b))
     ([String a Long b] (println a (str b))))
我想把它扩展到任意的东西,比如两个字符串后跟一个映射,映射后跟一个double,两个double后跟一个IFn等等

(defn class2 [x y]
  [(class x) (class y)])

(defmulti foo class2)

(defmethod foo [String String] [a b]
  (println a b))

(defmethod foo [Long Long] [a b]
  (println (+ a b)))
从REP:

user=> (foo "bar" "baz")
bar baz
nil
user=> (foo 1 2)
3
nil

您也可以考虑使用<代码>类型< /代码>代替<代码>类< /代码>;代码>类型返回

:类型
元数据,如果没有元数据,则委托给


而且,
class2
不必在顶层定义;将
(fn[x y]…)
作为分派函数传递到
defmulti
也可以。

如果使用
类型而不是
,则代码也将在ClojureScript中工作