在Eval()中执行toString() - Groovy(Gstring中的方法调用)

时间:2014-10-08 15:45:58

标签: java groovy eval

考虑一下,

的值
$RespNode

RespJson.seatbid[0].bid[0].price

我正在尝试运行

Eval.me('RespJson', RespJson, "assert $RespNode.toString() == '$aValue'") 

但是收到错误

 [No such property: toString for class: java.lang.String]

当我运行它时(直接,没有Eval())

assert RespJson.seatbid[0].bid[0].price.toString()==aValue

运行正常(无错误)

以下也可以正常工作(没有toString())

   Eval.me('RespJson', RespJson, "assert $RespNode == '$aValue'")

任何想法,如何使用toString()运行Eval()谢谢!

2 个答案:

答案 0 :(得分:2)

$RespNode.toString()将立即被替换。您必须使用${RespNode}.toString()让它通过eval运行。否则请参阅@ WillP的答案(respNode.toString一次评估,而toString不是属性)

def respJson = [seatbid:[[bid:[[price:666.0G]]]]]
def respNode = 'respJson.seatbid[0].bid[0].price'
def aValue = '666.0'
Eval.me('respJson', respJson, "assert ${respNode}.toString() == '$aValue'")

答案 1 :(得分:1)

GString中的方法调用需要大括号,否则父节点不会被解析为调用的一部分:

class Foo {
  def getBar() { 'get bar' }
  def bar() { 'method bar' }
}

foo = new Foo()

assert "$foo.bar()".toString() == "get bar()"
assert "${foo.bar()}".toString() == "method bar"