Яка різниця між рядками в одинарних або подвійних лапках у groovy?


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

Чи є якась різниця? Або просто як javascript для введення 'та "простішого введення в рядки?

Відповіді:


144

Одинарні лапки - це стандартний рядок Java

Подвійні лапки - це шаблонний рядок, який повертає GString, якщо він шаблонний, або стандартний рядок Java. Наприклад:

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 у своїй відповіді , варто прочитати (особливо частина про GStrings не є рядками приблизно на 2/3 шляху вниз.


5
Хороший момент щодо того, що GString не є String. Це стає проблематичним, якщо не вдається порівняти рівні рівні між GString та String, хоча вони містять однакові символи. Це те, на що ви просто повинні навчитися, особливо звертаючись до клавіш String / GString на картах.
Стівен

19

Я розумію, що рядок із подвійними лапками може містити вбудовані посилання на змінні та інші вирази. Наприклад: "Hello $name", "Hello ${some-expression-here}". У цьому випадку a GStringбуде інстанційовано замість регулярного String. З іншого боку, рядки з одинарними лапками не підтримують цей синтаксис і завжди призводять до простогоString . Більше про тему тут:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.