Получить значение переменной для ее имени в Groovy

У меня определены следующие переменные:

def VAL1 = 'foo'
def VAL2 = 'bar'

def s2 = 'hello ${VAL1}, please have a ${VAL2}'

Как проще всего заставить эту замену работать? Как мне построить GString из s2 и оценить ее? (VALs и s2 загружаются из базы данных, этот фрагмент предназначен только для демонстрации моей проблемы.)


person jabal    schedule 15.06.2011    source источник


Ответы (2)


Вы можете использовать SimpleTemplateEngine, если вы можете получить свои переменные на карте?

import groovy.text.SimpleTemplateEngine

def binding = [ VAL1:'foo', VAL2:'bar' ]

def template = 'hello ${VAL1}, please have a ${VAL2}'

println new SimpleTemplateEngine().createTemplate( template ).make( binding ).toString()

изменить

Вы можете использовать привязку вместо карты, поэтому в groovyconsole работает следующее:

// No def.  We want the vars in the script's binding
VAL1 = 'foo'
VAL2 = 'bar'

def template = 'hello ${VAL1}, please have a ${VAL2}'

// Pass the variables defined in the binding to the Template
new SimpleTemplateEngine().createTemplate( template ).make( binding.variables ).toString()
person tim_yates    schedule 15.06.2011
comment
моя проблема в том, что переменные VAL1 и VAL2, .. VALn отсутствуют на карте. Я даже не знаю их точного количества. - person jabal; 15.06.2011
comment
@jabal Можете ли вы отредактировать свой вопрос, чтобы привести лучший пример? Если вы не знаете, какие переменные вы получаете, как вы узнаете, какой шаблон использовать? - person tim_yates; 15.06.2011
comment
@jabal Добавлено другое возможное решение, использующее привязку (где ваши переменные уже должны быть объявлены) в качестве карты для шаблона. - person tim_yates; 15.06.2011

и что насчет :

def VAL1 = 'foo'
def VAL2 = 'bar'

def s2 = "hello ${VAL1}, please have a ${VAL2}".toString()

?

Примечание: обратите внимание на двойные кавычки

person Grooveek    schedule 15.06.2011
comment
Хорошо, но из базы данных я получаю простую строку, а не GString. Вот почему я использовал одинарные кавычки. Я должен сделать замену после определения этой переменной.. :-) - person jabal; 15.06.2011