我有这样的声明
eval.me ('a' , a , "assert something == something: log.info("some info")")
其中a是
a = Jsonslurper.parseText(someContent)
当assert为true时, eval语句有效,但当assert为false时,不能给我log.info
。我发现我需要将log
对象传递给eval。 log
对象在我的脚本中是直接可用的。所以我正在尝试这个
eval.xy(a,log, "assert something == something: log.info("some info")")
但是给了我no such property a
的错误。什么是错的,我怎么能纠正这个。谢谢!
编辑:实际通话时间为:
Eval.me('RespJson', RespJson, "assert ${RespNode}.toString() == '$aValue': log.info(\"${context.expand( '${#Project#assertValue}' )}\")")
给了我No such property: log
,因此我正在尝试我在原帖中提到的电话
答案 0 :(得分:2)
Eval.xy()
将前两个参数分别绑定到名为x
和y
的变量。无法将参数绑定到您选择的特定名称,就像使用Eval.me()
一样。因此,如果您决定使用Eval.xy()
,则必须相应地更改脚本:
Eval.xy(RespJson, log, "assert ${RespNode}.toString() == '$aValue': y.info(\"${context.expand( '${#Project#assertValue}' )}\")")
此外,如果您的本地变量RespNode
扩展为涉及RespJson
的字符串表达式(我怀疑它确实如此),那么您将不得不用{{RespJson
替换每一个x
1}}。
更灵活的方法是使用GroovyShell
和Binding
代替Eval
,如下所示:
def binding = new Binding(RespJson: RespJson, log: log)
new GroovyShell(binding).evaluate("assert ${RespNode}.toString() == '$aValue': log.info(\"${context.expand( '${#Project#assertValue}' )}\")")