Groovy строка интерполяция, когда строка определяется до определения интерполированных переменных - PullRequest
2 голосов
/ 29 марта 2019

У меня есть вопрос, похожий на этот:

Интерполяция Groovy-строки со значением, известным только во время выполнения

Что можно сделать, чтобы выполнить следующую работу:

def message = 'Today is ${date}, your id is: ${id}';
def date1 = '03/29/2019'
def id1 = '12345'
def result = {date, id -> "${message}"}
println(result(date1, id1))

Итак, я хочу взять строку, которая уже была определена в другом месте (для простоты я определяю ее здесь как «сообщение»), с уже вставленными в нее интерполированными $ {date} и $ {id},и обработайте его здесь, используя замыкание, с определениями для полей ввода.

Я пробовал это с различными изменениями, определяя сообщение в замыкании без "$ {}", используя одинарные или двойные кавычки, встраиваядвойные кавычки вокруг интерполированных переменных в строке 'message' и т. д., я всегда получаю такой результат:

Today is ${date}, your id is: ${id}

Но я хочу это сказать:

Today is 03/29/2019, your id is: 12345

Сработало следующеено я не уверен, что это лучший способ:

def message = '"Today is ${date}, your id is: ${id}"'
def sharedData = new Binding()                          
def shell = new GroovyShell(sharedData)                 
sharedData.setProperty('date', '03/29/2019')     
sharedData.setProperty('id', '12345')
println(shell.evaluate(message))

http://docs.groovy -lang.org / latest / html / Documentation / guide-integrating.html

1 Ответ

2 голосов
/ 29 марта 2019

ernest_k прав, вы можете использовать движок шаблонов именно для этого:

import groovy.text.SimpleTemplateEngine

def templatedMessage = new SimpleTemplateEngine().createTemplate('Today is ${date}, your id is: ${id}')

def date1 = '03/29/2019'
def id1 = '12345'

def result = { date, id -> templatedMessage.make(date: date, id: id)}
println(result(date1, id1))
...