Collections 闭包集合。不同的调用方法。

Collections 闭包集合。不同的调用方法。,collections,groovy,closures,Collections,Groovy,Closures,在工作中,我们讨论的是一个简单(或不是那么简单)的问题。?以下调用方法之间有什么区别吗 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 = list

在工作中,我们讨论的是一个简单(或不是那么简单)的问题。?以下调用方法之间有什么区别吗

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  
您还可以执行以下操作:

listObj*.prtn()

这与你的方法得出的结果相同#1

这两个语句的副作用是相同的:它们打印“1234”。但返回值是不同的

prtn
方法总是返回
null
,因此
listObj.collect{obj->obj.prtn()}
的值是
[null,null,null,null]

listObj.collect{obj->{->obj.prtn()}的情况下,每个{it()}
返回调用它的集合,结果将是一个闭包对象列表(正如
listObj.collect{obj->{->obj.prtn()}
返回的一样)

通常,如果您只想迭代一个集合以获得某些副作用,请使用
每个
;如果要将其转换为其他集合,请使用
collect
。并尝试“否”来混合副作用迭代和转换:)