2016-09-27 2 views
9

В Groovy у меня есть многострочная строка, определенная с помощью ''', в которой мне нужно использовать интерполяцию, чтобы заменить некоторые другие переменные.Как использовать String-интерполяцию в многострочной строке Groovy?

Для всех моих усилий я не могу заставить его работать - я полагаю, мне нужно избежать чего-то, чего мне не хватает.

Вот некоторые примеры кода:

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

На данный момент, это выводит:

${mexicanFood} & ${cretanFood} 

в то время как я ясно ожидать:

Tacos & Dakos 

(Примечание - Я предпочел бы не для конкатенации струн)

ответ

14

В Groovy одинарные кавычки используются для создания неизменяемых строк, точно так же, как Java делает с двойными кавычками.

Когда вы используете двойные кавычки в Groovy, вы указываете во время выполнения свое намерение создать изменяемую строку String или Groovy String (короткое замыкание в GString). Вы можете использовать переменную интерполяцию с изменяемыми строками, иначе вы можете оставить ее в виде обычной простой строки Java.

Такое поведение распространяется на многострочные строковые версии; использование тройных одинарных кавычек создает неизменяемую многострочную строку, тогда как тройные двойные кавычки создают Groovy String.

18

Вместо использования ''' для GString или multi-line string использования """

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

GString, заключенный в ''' не сможет разрешить placeholder - $. Вы можете найти более подробную информацию в разделе Groovy Documentation под заголовком Строка и Строка Сводная таблица блок.

+0

Эй, спасибо! почему бы «работать» вместо «»? – gsaslis

+0

@gsaslis это базовый литературный литерал из массивной строки из целого ряда – injecteer

+0

@gsaslis Я добавил причину в ответ. –