当我碰巧在groovy中发现以下是true
时,我正在编写单元测试
null.collect({ //Anything }) == []
我找不到原因。 groovy的哪一部分给出了这种行为?我检查了NullObject
但是没有这个收集方法。那怎么回事?
答案 0 :(得分:2)
在groovy null
中有iterator()
方法返回一个空迭代器。在null上调用collect
与null.iterator().collect({/*whatever*/})
相同,因此这将是[]
。
请参阅此bug report的评论。
答案 1 :(得分:1)
collect
方法在运行时通过DefaultGroovyMethods
类添加到所有对象,请参阅here,因此每个类都有此方法:
class Lol {}
assert new Lol().collect({}) == [null]
assert new Lol().iterator().toList() //is not empty, contains 'this'