2012-07-28 26 views
8

मैं अलग तरह से आदिम प्रकार और उनके आवरण वर्गों के बीच मेरा कार्यक्रम कार्य करना चाहते हैं, उदाहरण के लिए:आदिम प्रकारों पर multimethod कैसे प्रेषित करें?

(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 

int तो, है आदिम प्रकारों पर multimethod प्रेषण संभव है?

====== संपादित ======

मैं clojure में एक गूगल अमरूद लपेटकर किया गया था। इसमें एक प्राचीन पुस्तकालय है, जैसे कि बूलियन, डॉब्यूल, इट्स इत्यादि। उनके पास कुछ विधियां आम हैं, इसलिए मैं multimethod को आजमा देना चाहता हूं।

+0

क्या आप समझा सकते हैं कि आप ऐसा क्यों करना चाहते हैं? वर्तमान में प्राइमेटिव्स पर प्रेषण संभव नहीं है, लेकिन संभवतः एक ही उद्देश्य (Google "XY समस्या") प्राप्त करने का एक अच्छा तरीका है – mikera

+0

@ मिकरा संपादित! – qiuxiafei

उत्तर

4

नहीं, यह वर्तमान में संभव नहीं है। एक फ़ंक्शन के लिए एक तर्क (जैसे मल्टीमीशन प्रेषण फ़ंक्शन) या तो ऑब्जेक्ट होता है (इस प्रकार प्राइमेटिव्स को बॉक्स किया जाएगा) या एक आदिम लंबा/डबल (इस प्रकार ऑब्जेक्ट्स को अनबॉक्स किया जाएगा)। आपके परिदृश्य में एक फ़ंक्शन की आवश्यकता होती है जो फ़ंक्शन के अंदर उस भेद को ले जा सकती है और उसे सुरक्षित रख सकती है।

यह कहा गया है कि आप जो भी वास्तविक समस्या हल करने की कोशिश कर रहे हैं, उसके समाधान हो सकते हैं।