null.collect() returns 空列表
null.collect() returns empty list
我在写单元测试的时候偶然发现在groovy下面是true
null.collect({ //Anything }) == []
我找不到原因。 groovy 的哪一部分给出了这种行为?我检查了 NullObject
但没有这种收集方法。那么这是怎么发生的呢?
collect
方法在运行时通过 DefaultGroovyMethods
class 添加到所有对象,参见 here,所以每个 class 都有这个方法:
class Lol {}
assert new Lol().collect({}) == [null]
assert new Lol().iterator().toList() //is not empty, contains 'this'
在 groovy 中 null
有 iterator()
方法,其中 returns 是一个空迭代器。在 null 上调用 collect
与 null.iterator().collect({/*whatever*/})
相同,因此这将是 []
.
查看对此的评论 bug report。
我在写单元测试的时候偶然发现在groovy下面是true
null.collect({ //Anything }) == []
我找不到原因。 groovy 的哪一部分给出了这种行为?我检查了 NullObject
但没有这种收集方法。那么这是怎么发生的呢?
collect
方法在运行时通过 DefaultGroovyMethods
class 添加到所有对象,参见 here,所以每个 class 都有这个方法:
class Lol {}
assert new Lol().collect({}) == [null]
assert new Lol().iterator().toList() //is not empty, contains 'this'
在 groovy 中 null
有 iterator()
方法,其中 returns 是一个空迭代器。在 null 上调用 collect
与 null.iterator().collect({/*whatever*/})
相同,因此这将是 []
.
查看对此的评论 bug report。