2013-04-08 116 views
4

一个基本的常规问题。为了使我的代码健壮,我需要使用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:我需要它不仅仅适用于字符串。因此逮捕追加'

回答

2

你应该能够用BindingGroovyShell

做到这一点。如果我们做GroovyShell的实例与绑定,默认情况下返回时,没有财产S中的属性的名称发现:

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

我们可以评估你的groovyString:

shell.evaluate(groovyString) 

这基本上evalu阿泰的第一种形式,既yay性能得到解决的字符串yay

+0

它的工作原理就像一个魅力:) – Avinash 2013-04-08 12:02:03

+0

显然,如果你需要传递参数,可以那么你可以改变'[:]。withDefault {}它来'像'[a:13] .withDefault {it}'。那么'groovyString ='a == 13''就可以工作,例如...祝你好运! – 2013-04-08 12:04:31