2013-04-08 3 views
4

Основной важный вопрос. Чтобы сделать мой код надежным, мне нужно использовать Eval.me (String), который предлагает groovy.Groovy Оценка экспрессии

У меня есть проблема, хотя. Это возникает, когда я пытаюсь выполнить сравнение строк.

def x='yay' 
def y='yay' 
def groovyString="'$x' == '$y'" 
println Eval.me(groovyString); 

Отпечатано верно.

Но ниже код просто говорит «яй» не является определение переменной,

def x='yay' 
def y='yay' 
def groovyString="$x == $y" 
println Eval.me(groovyString); 

Я знаю, почему приходит эта ошибка :) Есть ли способ, где я могу обойти эту проблему, ж/o действительно нужно добавить ' ' для сравнения строк?

P.S: Мне нужно, чтобы оно работало правильно, а не только строки. Поэтому постижение добавлять «»

ответ

2

Вы должны быть в состоянии сделать это с Binding и GroovyShell

Если мы делаем экземпляр GroovyShell с переплетом, который по умолчанию возвращает имя свойства при отсутствии недвижимости s найдено:

def shell = new GroovyShell(new Binding([:].withDefault{ it })) 

затем мы можем оценить ваш groovyString:

shell.evaluate(groovyString) 

Которые в основном evalu Атес к первой форме, так как оба yay свойства разрешится в строку yay

+0

Он работает как шарм :) – Avinash

+0

Очевидно, что если вам нужно передать Params, то вы можете изменить '[:]. withDefault {это}' к что-то вроде '[a: 13] .withDefault {it}'. Тогда 'groovyString = 'a == 13'' будет работать, например ... Удачи! –

Смежные вопросы