Groovy表达式评估
问题描述:
一个基本的常规问题。为了使我的代码健壮,我需要使用groovy提供的Eval.me(String)。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:我需要它不仅仅适用于字符串。因此逮捕追加'
答
你应该能够用Binding
和GroovyShell
做到这一点。如果我们做GroovyShell的实例与绑定,默认情况下返回时,没有财产S中的属性的名称发现:
def shell = new GroovyShell(new Binding([:].withDefault{ it }))
我们可以评估你的groovyString:
shell.evaluate(groovyString)
这基本上evalu阿泰的第一种形式,既yay
性能得到解决的字符串yay
它的工作原理就像一个魅力:) – Avinash 2013-04-08 12:02:03
显然,如果你需要传递参数,可以那么你可以改变'[:]。withDefault {}它来'像'[a:13] .withDefault {it}'。那么'groovyString ='a == 13''就可以工作,例如...祝你好运! – 2013-04-08 12:04:31