2012-06-15 7 views
14

अजगर में, मैं एक स्ट्रिंग शाब्दिक (कच्चे स्ट्रिंग) के लिए एक r दुभाषिया बताने के लिए स्ट्रिंग में विशेष वर्ण का अनुवाद नहीं उपसर्ग कर सकते हैं:क्या क्लोजर में कच्ची स्ट्रिंग है?

>>> r"abc\nsdf#$%\^" 
r"abc\nsdf#$%\^" 

वहाँ Clojure में एक ही बात करने के लिए एक तरीका है?

उत्तर

14

क्लोजर तार जावा स्ट्रिंग हैं और पाठक अपनी व्याख्या में कुछ भी महत्वपूर्ण नहीं जोड़ता है। The reader page बस कहता है "मानक जावा भागने के पात्र समर्थित हैं।"

आप बच सकते हैं \ हालांकि:

user> (print "abc\\nsdf#$%\\^") 
abc\nsdf#$%\^ 

यह केवल, स्ट्रिंग शाब्दिक पाठक द्वारा पढ़ा को प्रभावित इसलिए यदि आप एक फ़ाइल से तार पढ़ा पाठक उन्हें कभी नहीं देखता है:

user> (spit "/tmp/foo" "abc\\nsdf#$%\\^") 
nil 
user> (slurp "/tmp/foo") 
"abc\\nsdf#$%\\^" 
user> (print (slurp "/tmp/foo")) 
abc\nsdf#$%\^nil 
user> 

तो , मुझे लगता है कि मूल जवाब नहीं है।

2

ऐसे उद्देश्यों के लिए एक शाब्दिक नियमित अभिव्यक्ति के लिए उपयोग किया जा सकता है।

user=> #"abc\nsdf#$%\^" 
#"abc\nsdf#$%\^" 
user=> (type #"abc\nsdf#$%\^") 
java.util.regex.Pattern 
user=> (println (str #"abc\nsdf#$%\^")) 
abc\nsdf#$%\^ 
nil 
+1

अच्छा, शायद यह बुरा है। – BLUEPIXY

5

कृपया ध्यान दें अगर आप वामावर्त (Clojure के लिए ग्रहण प्लगइन) का उपयोग कर रहे हैं, वहाँ एक विधा, "स्मार्ट पेस्ट" (डिफ़ॉल्ट रूप से अक्षम) कहा जाता है जो सही ढंग से विशेष वर्ण जब आप भागने का ध्यान रखता है कि एक मौजूदा शाब्दिक स्ट्रिंग के अंदर पेस्ट करें।

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