Las cadenas de comillas simples son objetos String. Las cadenas de comillas simples no se expanden. Las variables de la clase String son inmutables.
generaciondecodigos@nereida:~/src/groovy/strings$ cat -n literals.groovy 1 str = 'hello' 2 println str[2] 3 4 try { 5 str[4] = '!' 6 } 7 catch (Exception ex) { 8 println ex 9 }generaciondecodigos@nereida:~/src/groovy/strings$ groovy literals.groovy l groovy.lang.MissingMethodException: No signature of method: java.lang.String.putAt() is applicable for argument types: (java.lang.Integer, java.lang.String) values: [4, !]
Siguen algunos ejemplos tomados de http://pleac.sourceforge.net/pleac_groovy/strings.html. Las cadenas de comillas dobles pertencence a la clase GString (Véase la entrada de la wikipedia para gstring) y permiten interpolar expresiones. Es posible obtener una cadena que abarca múltiples líneas repitiendo el delimitador tres veces:
//---------------------------------------------------------------------------------- string = '\\n' // two characters, \ and an n assert string.size() == 2 string = "\n" // a "newline" character string = '\n' // a "newline" character string = "Jon 'Maddog' Orwant" // literal single quote inside double quotes string = 'Jon \'Maddog\' Orwant' // escaped single quotes string = 'Jon "Maddog" Orwant' // literal double quotes inside single quotes string = "Jon \"Maddog\" Orwant" // escaped double quotes string = ''' This is a multiline string declaration using single quotes (you can use double quotes) ''' //----------------------------------------------------------------------------------
Los 'documentos aqui' interpolables (véase la entrada Here document de la Wikipedia) - que es como se denominan a las cadenas multilínea - pueden ser muy útiles para crear templates:
generaciondecodigos@nereida:~/src/groovy/strings$ cat -n CreateXML.groovy 1 #!/usr/bin/env groovy 2 3 def xmllang(language, author) { 4 fragment = """ 5 <language name = "${language}"> 6 <author>${author}</author> 7 </language> 8 """ 9 } 10 langs = [ 'C++': 'Stroustrup', 'Java' : 'Gosling', 'Lisp' : 'McCarthy' ] 11 content = '<languages>' 12 langs.each{language, author -> 13 content += xmllang(language, author) 14 } 15 content += '</languages>' 16 println content generaciondecodigos@nereida:~/src/groovy/strings$ ./CreateXML.groovy <languages> <language name = "C++"> <author>Stroustrup</author> </language> <language name = "Java"> <author>Gosling</author> </language> <language name = "Lisp"> <author>McCarthy</author> </language> </languages> generaciondecodigos@nereida:~/src/groovy/strings$
Si una línea termina en escape se une a la siguiente:
generaciondecodigos@nereida:~/src/groovy/strings$ cat -n ./MultilineStringsEscape.groovy 1 #!/usr/bin/env groovy 2 def name = "James" 3 4 def text = """\ 5 hello there ${name} \ 6 how are you today? 7 """ 8 9 println(text) generaciondecodigos@nereida:~/src/groovy/strings$ ./MultilineStringsEscape.groovy hello there James how are you today?
Casiano Rodríguez León