2011-03-26 17 views
7

बस एक त्वरित सवाल मान जबकि Clojure को देख ....Clojure स्ट्रिंग वापसी

को देखते हुए निम्नलिखित आरईपीएल सत्र:

Clojure 1.2.0 
user=> "bar" 
"bar" 
user=> (print "bar") 
barnil 
user=> (defn foo [] ("bar")) 
#'user/foo 
user=> (foo) 
java.lang.ClassCastException: java.lang.String cannot be cast to clojure.lang.IFn (NO_SOURCE_FILE:0) 
user=> (print foo) 
#<user$foo [email protected]>nil 
user=> (print (foo)) 
java.lang.ClassCastException: java.lang.String cannot be cast to clojure.lang.IFn(NO_SOURCE_FILE:0) 

क्यों स्ट्रिंग "बार" प्रिंट समारोह द्वारा नहीं दिखाया है ? ऐसा लगता है कि पाठक फ़ू के वापसी मूल्य को हल करने का प्रयास करता है (जो एक स्ट्रिंग प्रतीत होता है) फ़ंक्शन के रूप में? फू को कैसे परिभाषित किया जाना चाहिए कि प्रिंट कमांडलाइन को स्ट्रिंग लिख देगा?

उत्तर

16

मैं अन्य अन्य लिस्प-पसंदों की तुलना में क्लोजर पर अभी भी कमजोर हूं, लेकिन यह सही नहीं है, है ना? होना चाहिए

(defn foo [] "bar") 

अन्यथा आप एक समारोह में एक समारोह है, जो अपने त्रुटि के साथ संगत है के रूप में स्ट्रिंग "bar" फोन करने की कोशिश करता है कि परिभाषित किया है।

mress:10004 Z$ clj 
Clojure 1.2.0 
user=> (defn foo [] "bar") 
#'user/foo 
user=> (foo) 
"bar" 
+0

:-) मैं की जड़ में एक * CWD * विधि को परिभाषित करने के साथ मुद्दों था मेरी परियोजना। कॉलिंग '(str cwd "src/foo.txt")' mistook * cwd * को प्रथम श्रेणी के फ़ंक्शन ऑब्जेक्ट के रूप में, '[email protected]/foo.txt "पर लौटा रहा है। इसे '(str (cwd) "src/foo.txt" में बदलना "अपेक्षित रूप से कार्य करता है। अब मैं समझता हूं कि एक अनिवार्य भाषा (पायथन) में, यह 'लेन' कथन और ऑपरेशन 'लेन() 'के बीच का अंतर है। – Droogans

6

क्योंकि Clojure जब आप पिछले बयान बुलाया प्रिंट समारोह में यह एक तर्क सूची के साथ कहा जाता है समारोह नाम रूप में किसी भी सूची के पहले तत्व "हल" की कोशिश करता है (foo) whish कार्य करने के लिए फोन के रूप में व्याख्या की है foo। अब तक तो सब ठीक है।

लेकिन समारोह foo रिटर्न सूची ("बार") है जो ok..it "बार" समारोह जिसकी अनुमति नहीं है करने के लिए कॉल की तरह व्याख्या की है नहीं ..

foo की तरह है अगर (defn foo [] "बार") यह काम करेगा क्योंकि प्रिंट प्राप्त नहीं होगा ("बार") लेकिन सिर्फ "बार" और प्रिंटिंग

+0

mmh, 2 सही जवाब 18 मिनट पहले :-) मुझे लगता है कि अन्य में थोड़ा और अधिक describtive है, लेकिन फिर भी इसे +1 – echox

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