web-dev-qa-db-fra.com

Comment utiliser l'interpolation de chaîne dans une chaîne multiligne Groovy?

Dans Groovy, j’ai une chaîne multiligne, définie avec ''', dans laquelle je dois utiliser l’interpolation pour remplacer certaines autres variables.

Malgré tous mes efforts, je ne peux pas le faire fonctionner - je suppose que je dois échapper à quelque chose qui me manque. 

Voici un exemple de code:

def cretanFood = "Dakos" 
def mexicanFood = "Tacos"
def bestRestaurant = ''' 
${mexicanFood} & ${cretanFood}
'''
print bestRestaurant

Pour le moment, cela affiche: 

${mexicanFood} & ${cretanFood}

alors que j'attendais clairement: 

Tacos & Dakos 

(Remarque - je préférerais ne pas concaténer les chaînes)

22
gsaslis

Dans Groovy, les guillemets simples sont utilisés pour créer des chaînes immuables, exactement comme le fait Java avec les guillemets doubles.

Lorsque vous utilisez des guillemets dans Groovy, vous indiquez à l'exécution que vous souhaitez créer une chaîne mutable ou une chaîne Groovy (GString en abrégé). Vous pouvez utiliser une interpolation variable avec des chaînes mutables ou le conserver sous forme de chaîne Java ordinaire.

Ce comportement s'étend aux versions multiligne String. L'utilisation de guillemets simples triple crée une chaîne multiligne immuable, tandis que les guillemets doubles créent une chaîne Groovy.

26
aalmiray

Au lieu d'utiliser ''' pour la GString ou multi-line string, utilisez """

def cretanFood     = "Dakos"  
def mexicanFood    = "Tacos"
def bestRestaurant = """${mexicanFood} & ${cretanFood}"""
print bestRestaurant​

GString inclus dans ''' ne pourra pas résoudre le placeholder - $. Vous trouverez plus de détails dans le répertoire Groovy Documentation sous les en-têtes String et String Summary Table.

31
Abhinandan Satpute

Il peut également être judicieux d’ajouter les variables hors des triples guillemets et de les concaténer avec le contenu. Quelque chose comme ça pour les cas où vous avez un contenu complexe dans les citations:

def bestRestaurant = mexicanFood + """ & """ + cretanFood

Puisque votre cas est assez simple, cela devrait aussi le faire:

def bestRestaurant = mexicanFood + " & " + cretanFood
0
Sasho Andrijeski