2011-07-20 12 views

Odpowiedz

75

Pojedyncze cudzysłowy są standardem Java String

Podwójne cudzysłowy są templatable String, który będzie albo zwrócić GString jeśli jest na matrycy, albo standard Java String. Na przykład:

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 

Jeśli spróbujesz templating z pojedynczymi cudzysłowami, to nie ma nic zrobić, więc:

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

Również link given by julkiewicz in their answer warto przeczytać (zwłaszcza część o GStrings nie. . istota Struny około 2/3 drodze w dół

+3

dobry punkt o GString niebędącego String. Staje się to problematyczne przy równych porównaniach między GString a String, nawet jeśli zawierają one te same znaki. To jest coś, na co musisz nauczyć się zwracać szczególną uwagę, szczególnie podczas odwoływania się do kluczy String/GString na mapach. – Steven

+0

Doskonałe wyjaśnienie, wielkie dzięki. –

11

moim rozumieniu jest to, że dwukrotnie cytowany łańcuch może zawierać wbudowane odwołania do zmiennych i innych wyrażeń. na przykład:. "Hello $name", "Hello ${some-expression-here}" W tym przypadku GString będzie instancji zamiast zwykłego String. Z drugiej strony, łańcuchy z jednym cudzysłowem nie obsługują tej składni i zawsze skutkują zwykłym String. Więcej na ten temat tutaj:

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

Powiązane problemy