GString

GStrings correspondem a strings que contém expressões arbitrárias embutidas. Essas expressões são avaliadas dinamicamente e substituídas pelos valores produzidos.

Por exemplo:

double value = 56.78
def string = 'value is ${value}'
def gString = "value is ${value}"

println string
println gString
println string.getClass()
println gString.getClass()

Conforme notado no exemplo anterior, Strings e GStrings são classes diferentes. Essa diferença impede que os objetos dessas classes sejam comparados diretamente:

String val = '${val}'
def string1 = 'value is ${val}'
def gString1 = "value is ${val}"
def string2 = 'value is'
def gString2 = "value is" /* Não será uma GString. */

println('string1.equals(gString1)? ' + string1.equals(gString1))
println('string2.equals(gString2)? ' + string2.equals(gString2))
println('string2.equals(gString2.toString())? ' + string2.equals(gString2.toString()))
println('gString1 instanceof String? ' + (gString1 instanceof String))
println('gString2 instanceof String? ' + (gString2 instanceof String))

As expressões podem ser tão complexas quanto se queira. Apesar da avaliação da expressão ocorrer no momento em que a GString é definida, a incorporação do valor produzido só ocorrerá quando o método GString.toString() for invocado. Para causar o efeito de uma avaliação tardia (lazy evaluation), pode-se usar closures:

def value = 123
def flag = true

def gString1 = "value is $value"
def gString2 = "value is ${value}"
def gString3 = "value is ${writer -> writer << value}"
def gString4 = "value is ${flag? value: 'unknown'}"
def gString5 = "value is ${writer -> writer << (flag? value: 'unknown')}"

value = 456; flag = false
println gString1
println gString2
println gString3
println gString4
println gString5

Referências adicionais

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*


− um = 6

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>