考虑一下,
的值$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()
谢谢!
答案 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"