4

一个基本的常规问题。为了使我的代码健壮,我需要使用 groovy 提供的 Eval.me(String)。

不过我有一个问题。当我尝试进行字符串比较时会出现问题。

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

这打印正确。

但是下面的代码只是说'yay'不是变量定义,

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

我知道为什么会出现这个错误:) 有没有办法可以回避这个问题而实际上不需要附加' '字符串比较?

PS:我需要它能够正常工作,而不仅仅是字符串。因此担心附加''

4

1 回答 1

2

您应该可以使用Bindingand来执行此操作GroovyShell

如果我们创建一个带有 Binding 的 GroovyShell 实例,当没有找到 property 时默认返回该属性的名称:

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

然后我们可以评估您的 groovyString:

shell.evaluate( groovyString )

这基本上评估为第一种形式,因为这两个yay属性都被解析为字符串yay

于 2013-04-08T10:17:11.123 回答