def a = "a string"
def b = 'another'
Czy są jakieś różnice? Lub po prostu jak javascript, aby ułatwić wprowadzanie wartości '
i "
w łańcuchach?Jaka jest różnica strun w pojedynczym lub podwójnym cudzysłowie w groovy?
def a = "a string"
def b = 'another'
Czy są jakieś różnice? Lub po prostu jak javascript, aby ułatwić wprowadzanie wartości '
i "
w łańcuchach?Jaka jest różnica strun w pojedynczym lub podwójnym cudzysłowie w groovy?
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ół
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
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
Doskonałe wyjaśnienie, wielkie dzięki. –