8

プログラムがプリミティブ型とそのラッパークラスの間で異なる動作をするようにしたいのです。次に例を示します。

(defmulti try-type class)

(defmethod try-type Integer [arg]
  (println "Integer"))

(defmethod try-type Integer/TYPE [arg]
  (println "int"))

しかし、私は整数と整数の両方を試しますが、それは機能しません

user=> (try-type (.intValue (int 2)))
Integer
nil
user=> (try-type  (int 2))
Integer
nil

では、プリミティブ型にマルチメソッドをディスパッチすることは可能ですか?

======編集======

私はグーグルグアバをclojureに包んでいました。ブール値、Dobules、Intsなどのプリミティブライブラリがあります。それらにはいくつかの共通のメソッドがあるので、マルチメソッドを試してみたいと思います。

4

1 に答える 1

4

いいえ、現在はできません。関数 (マルチメソッド ディスパッチ関数など) への引数は、オブジェクト (プリミティブがボックス化される) またはプリミティブ long/double (オブジェクトがボックス化されない) のいずれかです。あなたのシナリオでは、どちらかを取り、関数内でその区別を保持できる関数が必要です。

とはいえ、解決しようとしている実際の問題が何であれ、解決策があるかもしれません。

于 2012-07-28T18:38:41.917 に答える