详细说明 Opals 答案:docs 中有两个部分和一个脚注与此处相关:
如果闭包声明了一个无类型参数,它会通过
方法的参数列表:
还有
在大多数情况下,直接访问
方法的参数。如果闭包声明了多个参数或
单个类型参数,方法参数将被一一映射
关闭参数[脚注]:
脚注:
闭包参数的解构语义直接来自
时髦的。
问题是您只有一个参数列表,并且由于泛型已被删除,因此常规无法确定您实际上是否要打开列表。
所以单个非List 参数可以正常工作:
myDomainObjectRepository.save(_) >> { MyDomainObject myDomainObject ->
assert myDomainObject == new MyDomainObject(someId, someData)
}
或List 参数结合第二个参数,例如save(List domain, boolean flush)
myDomainObjectRepository.save(_, _) >> { List<MyDomainObject> myDomainObjects, boolean flush ->
assert myDomainObjects == [new MyDomainObject(someId, someData)]
}
所以文档对这种极端情况有点误导。恐怕你在这个案子的演员阵容中遇到了困难。
编辑:如果你这样做,你应该能够摆脱 IDE 警告。
myDomainObjectRepository.save(_) >> { List<List<MyDomainObject>> arguments ->
List<MyDomainObject> myDomainObjects = arguments[0]
assert myDomainObjects == [new MyDomainObject(someId, someData)]
}