首页 文章

Groovy表达式评估

提问于
浏览
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);

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

P.S:我需要它才能正常工作,而不仅仅是字符串 . 因此,担心附加''

1 回答

  • 2

    您应该可以使用 BindingGroovyShell 执行此操作

    如果我们使用Binding创建一个GroovyShell实例,默认情况下会在找不到属性时返回该属性的名称:

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

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

    shell.evaluate( groovyString )
    

    这基本上评估为第一个表单,因为 yay 属性都被解析为String yay

相关问题