def a = "a string"
def b = 'another'
Czy jest jakaś różnica? Lub po prostu javascript do wprowadzania '
i "
łatwiejszego w łańcuchach?
Odpowiedzi:
Pojedyncze cudzysłowy to standardowy ciąg Java
Podwójne cudzysłowy to ciąg znaków, który można utworzyć za pomocą szablonu, który zwróci ciąg GString, jeśli jest utworzony na podstawie szablonu, lub standardowy ciąg języka Java. 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 utworzyć szablony za pomocą ciągów znaków w pojedynczych cudzysłowach, nic to nie da, więc:
println 'hi $a' // prints "hi $a"
Warto również przeczytać link podany przez julkiewicza w ich odpowiedzi (szczególnie część o GStrings nie będąca Stringami w 2/3 drogi w dół.
Rozumiem, że ciąg znaków w podwójnych cudzysłowach może zawierać osadzone odniesienia do zmiennych i innych wyrażeń. Na przykład: "Hello $name"
, "Hello ${some-expression-here}"
. W tym przypadku GString
zostanie utworzony egzemplarz a zamiast zwykłego String
. Z drugiej strony ciągi w apostrofach nie obsługują tej składni i zawsze dają w wyniku zwykły String
. Więcej na ten temat tutaj:
http://docs.groovy-lang.org/latest/html/documentation/index.html#all-strings