【问题标题】:evaluate an assignment expression in Groovy在 Groovy 中计算赋值表达式
【发布时间】:2014-09-17 21:15:22
【问题描述】:

我有这样一个表达式:

def expr = 'anything="something"'

在我的例子中,上面的字符串来自一个网络服务,但它可能来自任何地方。我想对此进行评估,以便最终得到值为“某物”的变量“任何东西”,这样:

assert anything=="something"

到目前为止我尝试过:

def anything
Eval.me(expr)    // `anything` ends up null

从我在 SO 上读到的东西:

def anything
Eval.me(expr.inspect())    // same thing: `anything` ends up null

也试过了:

def anything
expr.execute()    // complains: "Executable name has embedded quote, split the arguments"

这个可以吗?

【问题讨论】:

    标签: groovy


    【解决方案1】:

    你可以使用GroovyShell,看看:

    def expr = 'anything = "something"'
    
    def binding = new Binding()
    def groovyShell = new GroovyShell(binding)
    groovyShell.evaluate(expr)
    
    assert binding.getVariable('anything') == "something"
    

    【讨论】:

    • 我使用binding.getVariable(expr.split('=')[0])对其进行了轻微改进。像魅力一样工作!
    • 很好,很高兴它有帮助:)
    • 请记住,您正在盲目地执行任何可以从该 Web 服务返回的代码。我会对此非常警惕。如果您只从该服务获取字符串,我会使用简单的.split('='),从第二个值中删除引号,然后自己进行分配。
    猜你喜欢
    • 2016-11-04
    • 2019-05-26
    • 1970-01-01
    • 2012-01-02
    • 2014-05-02
    • 1970-01-01
    • 2021-09-01
    相关资源
    最近更新 更多