2011-04-20 17 views
5

मैं एक समारोह जो एक समारोह और एक नंबर लेता है और संख्या पर समारोह के आवेदन देता है, और एक घन समारोह है:clojure में तर्क के रूप में कार्य गुजर

(defn something [fn x] 
    (fn x)) 

(defn cube [x] 
    (* x x x)) 

जब मैं समारोह फोन के रूप में निम्नानुसार यह काम करता है:

(something cube 4) 

लेकिन यह एक त्रुटि देता है:

(something Math/sin 3.14) 

बहरहाल, यह काम करता है:

(something #(Math/sin %) 3.14) 

स्पष्टीकरण क्या है?

उत्तर

13

Math.sin कोई फ़ंक्शन नहीं है! यह जावा से सीधे एक विधि है, और क्लोजर कार्यों का पालन करने वाले विभिन्न नियमों को समझ में नहीं आता है। यदि आप इसे किसी फ़ंक्शन में लपेटते हैं, तो वह फ़ंक्शन प्रॉक्सी के रूप में कार्य कर सकता है, "गूंगा" विधि में तर्क पारित कर सकता है और परिणामों को आपके "स्मार्ट" फ़ंक्शन-ओरिएंटेड संदर्भ में वापस कर सकता है।

+0

धन्यवाद, अब मैं समझता हूं। वास्तव में जब मैं इस भ्रम उत्पन्न हुआ मैक्रोज़ को समझने की कोशिश कर रहा था। क्या आप मुझे यह लाइन समझा सकते हैं? - चूंकि मैक्रोज़ अपने तर्कों का मूल्यांकन नहीं करते हैं, इसलिए अनगिनत फ़ंक्शन नाम उन्हें पास किए जा सकते हैं और तर्कों के साथ कार्यों को कॉल किया जा सकता है। फ़ंक्शन परिभाषाएं ऐसा नहीं कर सकती हैं और इसके बजाय अनाम कार्यों को पारित किया जाना चाहिए जो कार्यों को कॉल लपेटें। ' – Pranav

+0

मेरा भ्रम यह है कि मैंने स्पष्ट रूप से एक अनूठा फ़ंक्शन 'क्यूब' को 'कुछ' और पारित किया है। – Pranav

+1

क्या आप टिप्पणी के बजाए इसे वास्तविक एसओ सवाल के रूप में पूछ सकते हैं? यहां स्वरूपण बहुत कमजोर है, और मैं वास्तव में एक पूरी तरह से असंबंधित प्रश्न में "दूसरा जवाब" जोड़ना नहीं चाहता हूं। – amalloy

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