groovy - java interpolacion string
¿Cómo uso la interpolación de cadenas en una cadena multilínea de Groovy? (3)
En Groovy, tengo una cadena multilínea, definida con ''''''
, en la que necesito usar la interpolación para sustituir otras variables.
Por todos mis esfuerzos, no puedo hacer que funcione. Supongo que necesito escapar de algo que me falta.
Aquí hay un código de ejemplo:
def cretanFood = "Dakos"
def mexicanFood = "Tacos"
def bestRestaurant = ''''''
${mexicanFood} & ${cretanFood}
''''''
print bestRestaurant
Por el momento, esto produce:
${mexicanFood} & ${cretanFood}
mientras que claramente esperaría:
Tacos & Dakos
(Nota: preferiría no concatenar las cadenas)
En Groovy, las comillas simples se usan para crear cadenas inmutables, exactamente como lo hace Java con comillas dobles.
Cuando usa comillas dobles en Groovy, indica al tiempo de ejecución su intención de crear una cadena mutable o una cadena groovy (GString para abreviar). Puede usar la interpolación de variables con cadenas mutables, o puede dejarla como una cadena de Java normal y corriente.
Este comportamiento se extiende a las versiones de cadena multilínea; el uso de comillas simples triples crea una cadena multilínea inmutable, mientras que las comillas dobles triples crean una cadena groovy.
En lugar de usar ''''''
para GString
o el uso de multi-line string
"""
def cretanFood = "Dakos"
def mexicanFood = "Tacos"
def bestRestaurant = """${mexicanFood} & ${cretanFood}"""
print bestRestaurant
GString
incluido en ''''''
no podrá resolver el placeholder - $
. Puede encontrar más detalles en la documentación de Groovy en el encabezado Bloque y tabla de resumen de cadenas .
También puede ser una buena idea agregar las variables de las comillas triples y simplemente concatenarlas con el contenido. Algo como esto para los casos en los que tienes contenido complejo dentro de las citas:
def bestRestaurant = mexicanFood + """ & """ + cretanFood
Ya que tu caso es bastante simple, esto debería hacerlo también:
def bestRestaurant = mexicanFood + " & " + cretanFood