2012-07-28 10 views
8

Voglio che la mia legge-programma in modo diverso tra i tipi primitivi e le loro classi wrapper, per esempio:Come inviare multimetod sui tipi primitivi?

(defmulti try-type class) 

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

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

Ma non funziona, anche se provo Integer e int sia

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

Quindi, è è possibile inviare metodi multimetali su tipi primitivi?

====== ====== EDIT

stavo avvolgendo un guava google in clojure. C'è una libreria primitiva, come Booleans, Dobules, Ints ecc. Hanno alcuni metodi in comune, quindi voglio provare multimethod.

+0

potresti spiegare perché vuoi farlo? attualmente non è possibile effettuare il dispatching su primitive, ma probabilmente c'è un buon modo per raggiungere lo stesso obiettivo (google "XY Problem") – mikera

+0

@mikera modificato! – qiuxiafei

risposta

4

No, non è attualmente possibile. Un argomento di una funzione (come la funzione di invio multimodale) è o un oggetto (quindi le primitive saranno inscatolate) o un primitivo lungo/doppio (quindi gli oggetti saranno disgiunti). Lo scenario richiede una funzione che può assumere entrambi e preservare questa distinzione all'interno della funzione.

Detto questo, ci possono essere soluzioni a qualunque sia il vero problema che stai cercando di risolvere.

Problemi correlati