ग्रूवी में सिंगल या डबल कोट्स के भीतर स्ट्रिंग्स का अंतर क्या है?


95
def a = "a string"
def b = 'another'

क्या कोई अंतर है? या तार में इनपुट 'और "आसान करने के लिए जावास्क्रिप्ट की तरह ?

जवाबों:


144

एकल उद्धरण एक मानक जावा स्ट्रिंग हैं

डबल कोट्स एक टेम्परटेबल स्ट्रिंग हैं, जो या तो GString को लौटा देगा, यदि यह टेम्प्लेटेड है, या एक मानक जावा स्ट्रिंग। उदाहरण के लिए:

println 'hi'.class.name    // prints java.lang.String
println "hi".class.name    // prints java.lang.String

def a = 'Freewind'
println "hi $a"            // prints "hi Freewind"
println "hi $a".class.name // prints org.codehaus.groovy.runtime.GStringImpl

यदि आप एकल उद्धृत स्ट्रिंग्स के साथ अस्थायीकरण का प्रयास करते हैं, तो यह कुछ भी नहीं करता है, इसलिए:

println 'hi $a'            // prints "hi $a"

इसके अलावा, उनके जवाब में julkiewicz द्वारा दिया गया लिंक पढ़ने के लायक है (जासूसी) जिस तरह से नीचे की ओर 2/3 स्ट्रिंग्स नहीं होने के बारे में है।


5
अच्छी बात यह है कि स्ट्रिंग के बारे में स्ट्रिंग नहीं है। यह समस्या समान हो जाती है, जबकि GString और स्ट्रिंग के बीच तुलना करने में बराबर होते हैं, भले ही वे समान वर्ण हों। यह कुछ ऐसा है जो आपको केवल देखने के लिए सीखने के लिए मिला है, खासकर जब नक्शे में स्ट्रिंग / जीस्ट्रिंग कुंजी को संदर्भित करते हैं।
स्टीवन

19

मेरी समझ यह है कि डबल-उद्धृत स्ट्रिंग में चर और अन्य अभिव्यक्तियों के एम्बेडेड सन्दर्भ हो सकते हैं। उदाहरण के लिए: "Hello $name", "Hello ${some-expression-here}"। इस मामले GStringमें एक नियमित के बजाय एक त्वरित किया जाएगा String। दूसरी ओर एकल-उद्धृत स्ट्रिंग्स इस सिंटैक्स का समर्थन नहीं करते हैं और हमेशा एक सादे परिणाम देते हैं String। विषय पर अधिक यहाँ:

http://docs.groovy-lang.org/latest/html/documentation/index.html#all-strings

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.