什么是空封闭的Groovy真理?

时间:2014-11-27 10:36:45

标签: groovy closures

我试图预测Groovy中此代码的行为

userList.find { }

.find documentation

当调用find方法并传递一个闭包时,它会将第一个评估闭包的元素返回到Groovies对true的理解。 在没有任何参数的情况下调用find方法时,它会根据Groovy事实返回列表中与true匹配的第一个对象。

如果使用空闭包怎么办?

  1. 它会评估为true,从而返回列表的第一个元素吗?
  2. 它是否总是评估为false并且在迭代列表null之后返回?
  3. 它会表现得像.find()吗?

1 个答案:

答案 0 :(得分:7)

来自Groovy Closures Formal DefinitionAlternative Source):

  

闭包始终具有返回值。可以通过闭包体中的一个或多个显式return语句指定该值,或者如果未明确指定return,则指定为最后执行的语句的值。如果最后执行的语句没有值(例如,如果最后一个语句是对void方法的调用),则返回null。

来自Groovy Truth

  

对象引用
  非空对象引用被强制为true   ......

assert !null

这告诉我,空闭包的返回值的真值总是假的,所以find永远找不到任何东西,因此可能会返回null