2011-04-06 16 views
8

मैं एक बहु विधि बनाना चाहता हूं जिसे मैं इस तरह कहता हूं:क्लोजर में मैं एक डिफॉमेड में एकाधिक तर्क कैसे पारित कर सकता हूं?

(defmethod some-method "some value" 
    [ a b ] 
    b) 

: लेकिन जो केवल पहले पैरामीटर 'ए' पर आधारित फ़ंक्शन का चयन करता है। मैं यह कैसे कर सकता हूं:

(defmulti some-method 
    WHAT GOES HERE?) 

उत्तर

8

जरूरत है मैं पूरी तरह से अपने प्रश्न समझ में नहीं आया है, लेकिन मुझे लगता है कि आप केवल एक तर्क पर प्रेषण करना चाहते हैं। आप ऐसा कर सकते हैं, मुझे लगता है:

user=> (defmulti even-or-odd (fn [x _] (even? x))) 
#'user/even-or-odd 
user=> (defmethod even-or-odd true [a _] :even) 
#<MultiFn [email protected]> 
user=> (defmethod even-or-odd false [a _] :odd) 
#<MultiFn [email protected]> 
user=> (even-or-odd 2 3) 
:even 
user=> (even-or-odd 3 3) 
:odd 
user=> 
6

आप मूल्य एक की के आधार पर समारोह का चयन मतलब है?

तो फिर तुम सिर्फ

(defmulti some-method (fn [a b] a)) 
संबंधित मुद्दे

 संबंधित मुद्दे