Как использовать интерполяцию String в многострочной строке Groovy?
В Groovy у меня есть многострочная строка, определенная с помощью '''
, в которой мне нужно использовать интерполяцию, чтобы заменить некоторые другие переменные.
При всех моих усилиях я не могу заставить его работать - я полагаю, мне нужно бежать от чего-то, чего мне не хватает.
Вот пример кода:
def cretanFood = "Dakos"
def mexicanFood = "Tacos"
def bestRestaurant = '''
${mexicanFood} & ${cretanFood}
'''
print bestRestaurant
На данный момент это выдает:
${mexicanFood} & ${cretanFood}
хотя я бы явно ожидал:
Tacos & Dakos
(Примечание - я бы предпочел не конкатенировать строки)
Ответы
Ответ 1
В Groovy одинарные кавычки используются для создания неизменяемых строк, точно так же, как Java делает с двойными кавычками.
Когда вы используете двойные кавычки в Groovy, вы указываете во время выполнения ваше намерение создать изменяемую строку String или Groovy String (короткое замыкание в GString). Вы можете использовать переменную интерполяцию с изменяемыми строками, иначе вы можете оставить ее в виде обычной простой строки Java.
Такое поведение распространяется на многострочные версии String; использование тройных одинарных кавычек создает неизменяемую многострочную строку, тогда как тройные двойные кавычки создают Groovy String.
Ответ 2
Вместо использования '''
для GString
или multi-line string
используйте """
def cretanFood = "Dakos"
def mexicanFood = "Tacos"
def bestRestaurant = """${mexicanFood} & ${cretanFood}"""
print bestRestaurant
GString
заключенный в '''
, не сможет разрешить placeholder - $
. Более подробную информацию вы можете найти в Groovy Documentation под заголовком String и String Summary Table block.
Ответ 3
Также может быть хорошей идеей добавить переменные из тройных кавычек и просто объединить их с содержимым. Примерно так для случаев, когда у вас сложный контент внутри кавычек:
def bestRestaurant = mexicanFood + """ & """ + cretanFood
Так как ваш случай довольно прост, это должно сделать и это:
def bestRestaurant = mexicanFood + " & " + cretanFood