Я пытаюсь создать сопоставление полей для сопоставления полей от удобных имен к переменным-членам в различных объектах домена. Чем больше контекста, что я построение запроса ElasticSearch на основе пользовательских построенных правил, хранящихся в базе данных, но ради MCVE:Использование groovy Eval для обработки сгенерированного выражения
class MyClass {
Integer amount = 123
}
target = new MyClass()
println "${target.amount}"
fieldMapping = [
'TUITION' : 'target.amount'
]
fieldName = 'TUITION'
valueSource = '${' + "${fieldMapping[fieldName]}" + '}'
println valueSource
value = Eval.me('valueSource')
Eval терпит неудачу. Вот результат:
123
${target.amount}
Caught: groovy.lang.MissingPropertyException: No such property: valueSource for class: Script1
groovy.lang.MissingPropertyException: No such property: valueSource for class: Script1
at Script1.run(Script1.groovy:1)
at t.run(t.groovy:17)
Что необходимо оценить сгенерированное имя переменной и возвращает значение 123
? Похоже, что реальная проблема заключается в том, что она не признает, что определено valueSource
, а не фактическое выражение, содержащееся в valueSource
, но это тоже может быть отжато.
Я думал, что 'оценка()' может работать, но это просто для скриптов и не работает в контексте приложения grails. –
Посмотрите на [docs] (http://docs.groovy-lang.org/latest/html/api/groovy/util/Eval.html) для Eval. Эти методы не знают о том, с какой целью вы их вызываете. Чтобы сделать доступным 'valueSource', вам нужно будет вызвать' Eval.me' с 'symbol' и' object' или вызвать один из методов 'x' /' xy'/'xyz'. – hsan
Я смотрел документы. Благодарю. –