2012-07-28 15 views
8

Quiero mi acto programa diferente entre los tipos de primitivas y sus clases de envoltura, por ejemplo:¿Cómo enviar multimétodo en tipos primitivos?

(defmulti try-type class) 

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

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

Pero esto no funciona, aunque trato de enteros e INT tanto

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

Por lo tanto, es es posible enviar multimétodo en tipos primitivos?

====== ====== EDITAR

i estaba envolviendo una guayaba en Google clojure. Hay una biblioteca primitiva en ella, como Booleans, Dobules, Ints, etc. Tienen algunos métodos en común, por lo que quiero probar con multimétodo.

+0

¿podría explicar por qué quiere hacer esto? actualmente no es posible el envío de primitivos, pero probablemente haya una buena forma de lograr el mismo objetivo (google "Problema XY") – mikera

+0

@mikera editado! – qiuxiafei

Respuesta

4

No, actualmente no es posible. Una arg a una función (como la función de despacho multimétodo) es un Objeto (por lo tanto, las primitivas estarán encuadradas) o una primitiva larga/doble (por lo tanto, los Objetos serán desempaquetados). Su escenario requiere una función que puede tomar cualquiera y preservar esa distinción dentro de la función.

Dicho esto, puede haber soluciones para cualquier problema real que intente resolver.

Cuestiones relacionadas