0
(a)複数のargsをディスパッチし、(b)いくつかのargsのみを扱うようにメソッドを指定できるようにする方法を見つけようとしています(コンパイラは最後のメソッドの_に似ていません)。defmethodディスパッチ時の可変引数
(defmulti whocares (fn [a1 a2] [(class a1)(class a2)]))
(defmethod whocares [String String] [s1 s2]
(println :s2 s1 s2))
(defmethod whocares [_ String] [any1 s2]
(println :_s any1 s2))
コンパイラは確かにそのようなことはしません_。
私は知っている:デフォルトのキャッチオールだが、もっと細かい(個々の引数について)必要がある。
CLでは、すべてのものと一致するタイプとしてtを使用しますが、(isa?whatever X)が常にtrueを返すような、
btw、私はJavaクラス階層のトップがあると思いますが、私はJavaクラスだけをサポートするライブラリから離れようとしています。あなたはJavaの階層の最上位クラスを使用したくない理由
(defmulti whocares (fn [a b] [(class a) (class b)]))
(defmethod whocares [String String] [a b] (println "Two strings" a b))
(defmethod whocares [Object String] [a b] (println "Anything and string" a b))
(whocares "a" "b")
;; => "Two strings a b"
(whocares 1 "c")
;; => "Anything and string 1 c"
(whocares :a "c")
;; => "Anything and string :a c"
私はわからない:
Thxを、私は馬鹿だが。 :)私はオブジェクトを除いてすべてを試しました、(oops)それは整数と一致しないと仮定します。 – kennytilton