2011-10-27 16 views
10

पर पारित तर्कों की गलत संख्या प्राप्त करना अधिक क्लोजर अजीबता। मेरे पास यह फ़ंक्शन है जिसे मैं परिभाषित करने और कॉल करने का प्रयास कर रहा हूं। यह 3 तर्क हैं, लेकिन जब मैं 3 तर्कों से कॉल करने की मैंक्लोजर फ़ंक्शन

Wrong number of args (1) passed to: solr-query$correct-doc-in-results-QMARK-$fn 
[Thrown class clojure.lang.ArityException] 

मिलता है जब मैं 2 तर्कों से कॉल करने की मैं

Wrong number of args (2) passed to: solr-query$correct-doc-in-results-QMARK- 
    [Thrown class clojure.lang.ArityException] 

हो और जब मैं 4 तर्क से कॉल करने की मैं

मिल

(defn correct-doc-in-results? [query results docid] 
    "Check if the docid we expected is returned in the results" 
    (some #(.equals docid) (map :id (get results query)))) 
:
Wrong number of args (4) passed to: solr-query$correct-doc-in-results-QMARK- 
    [Thrown class clojure.lang.ArityException] 

यहाँ समारोह की परिभाषा है

(correct-doc-in-results? "FLASHLIGHT" all-queries "60184") 

किसी को भी किसी भी विचार क्या हो रहा है है:

और यहाँ कैसे मैं (Emacs में स्वांक का उपयोग कर आरईपीएल से) इसे कहते हैं कोशिश कर रहा हूँ है? ऐसा क्यों लगता है कि जब मैं 3 गुजर रहा हूं, तो मैं केवल 1 तर्क में गुजर रहा हूं, लेकिन यह 2 या 4 के लिए सही हो जाता है? मैं अभी तक एक बहुत ही धाराप्रवाह क्लोजर प्रोग्रामर नहीं हूं, लेकिन एक समारोह को परिभाषित करना काफी बुनियादी है।

उत्तर

15

नोट अंतर

और

के बीच

solr-query$correct-doc-in-results-QMARK-

solr-query$correct-doc-in-results-QMARK-$fn

पहली बार अपने समारोह correct-doc-in-results? को दर्शाता है। उत्तरार्द्ध उस समारोह के अंदर परिभाषित कुछ अज्ञात फ़ंक्शन को संदर्भित करता है।

यदि आप 2 या 4 तर्क पारित करते हैं, तो आपको उम्मीद के अनुसार आपके अपूर्ण कार्य के लिए त्रुटि मिल रही है। जब आप 3 तर्क पारित करते हैं, तो आपको #(.equals docid) के लिए त्रुटि मिल रही है, क्योंकि #(.equals docid) शून्य तर्क चाहता है लेकिन एक प्राप्त कर रहा है। इसे #(.equals % docid) पर बदलने का प्रयास करें।

+0

बेशक। सरल स्पष्टीकरण के लिए धन्यवाद। –

+2

@ ब्रायन वास्तव में त्रुटि है क्योंकि अनाम फ़ंक्शन शून्य तर्क चाहता है (इसमें कोई% नहीं है) और 'कुछ' द्वारा कॉल किए जाने पर एक प्राप्त हो रहा है। बेशक, अगर वास्तव में फ़ंक्शन * को बिना किसी तर्क के बुलाया गया था, तो यह केवल एक तर्क के साथ '.equals' को कॉल करने का प्रयास करके एक और त्रुटि उत्पन्न करेगा। – amalloy

+0

आप सही हैं, मैं अपना जवाब संपादित करूंगा। –

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