[英]What is the Groovy truth of an empty closure?
我试图在 Groovy 中预测这段代码的行为
userList.find { }
当find
方法被调用并传递一个闭包时,它返回将闭包计算为 Groovies 对true
理解的第一个元素。 当不带任何参数调用find
方法时,它返回列表中第一个根据 Groovy 真理匹配为true
对象。
如果使用空闭包会发生什么?
null
?.find()
吗?从Groovy闭包的正式定义 ( 替代来源 ):
闭包始终具有返回值。 该值可以通过闭包主体中的一个或多个显式return语句指定,或者如果未显式指定return,则指定为最后执行的语句的值。 如果最后执行的语句没有值(例如,如果最后一个语句是对void方法的调用),则返回null。
对象引用
非空对象引用被强制为true。
...assert !null
这向我暗示了,空闭包的返回值的真相始终为假,因此find
永远找不到任何东西,因此可能返回null
。
只有当您将此闭包委托给 Map 时,才没有“空闭包”的定义,然后 Map 保持为空:
Map closureToMap(Closure c, Map attrs=[:]) {
c.resolveStrategy = Closure.DELEGATE_FIRST
c.delegate = attrs
c()
return attrs
}
def myEmptyClosure = {}
assert closureToMap(myEmptyClosure).isEmpty()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.