在工作中,我们正在讨论一个简单(或不那么简单)的问题。 ¿以下调用方式有什么区别吗?
class Obj {
def num
def prtn = {
print this.num
}
}
def listObj = [new Obj(num:1), new Obj(num:2), new Obj(num:3), new Obj(num:4)]
// End Common code
// Method #1
def lst = listObj.collect{ obj-> obj.prtn() }
// Method #2
def lst = listObj.collect{ obj-> { -> obj.prtn()} }.each{ it() }
// Common code
最佳答案
这两个语句的副作用是相同的:它们打印“1234”。但返回值不同。
prtn
方法始终返回 null
,因此 listObj.collect{ obj-> obj.prtn() }
的值为 [null, null, null, null]
.
对于listObj.collect{ obj-> { -> obj.prtn()} }.each{ it() }
,如 each
返回调用它的集合,结果将是 Closure 对象的列表(这就是 listObj.collect{ obj-> { -> obj.prtn()} }
返回的内容)。
一般来说,如果您只想迭代集合以获得某些副作用,请使用 each
;如果您想将其转换为不同的集合,请使用collect
。并且尽量不要混合副作用迭代和转换:)
关于collections - 关闭的集合。不同的调用方式。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12694300/