好久没动笔(键盘)了,发现自己变懒了。但是在实际的工作过程中,总是责怪自己没有动笔把自己之前的遇到的问题记录下来,等过一段时间之后,自己好要重新去搜索解决问题的办法,所以有些东西还得需要自己记下来,不然以后就又忘了。
浅谈闭包。
记得两年前也遇到过闭包这些名词,当时也去看了一些定义,强迫自己去理解,但当自己重新看的时候,却感觉有点陌生。最近在看《Android gradle 权威指南 》,讲到闭包的时候感觉自己有些不理解,然后就是百度了,偶然在百度百科上看见了对闭包的解释,稍微看了一下,竟然说的直截了当。比如:闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取[局部变量],所以闭包可以理解成“定义在一个[函数]内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。
比我在书上看的明白多了。
Groovy
闭包(Closure)是Java所不具备的语法结构(JAVA8增加了对闭包的支持)。闭包就是一个代码块,用“{ }”包起来。此时,程序代码也就成了数据,可以被一个变量所引用(与C语言的函数指针比较类似)。闭包的最典型的应用是实现回调函数(callback)。Groovy的API大量使用闭包,以实现对外开放。闭包的创建过程很简单,例如:
{ 参数 ->
代码...
}
参考下面的例子代码,定义了c1和c2两个闭包,并对它们进行调用:
def c1 = { println it }
def c2 = { text -> println text }
c1.call("content1") //用call方法调用闭包
c2("content2") //直接调用闭包
“->;”之前的部分为闭包的参数,如果有多个参数,之间可用逗号分割;“->;”之后的部分为闭包内的程序代码。如果省略了“->;”和它之前的部分,此时闭包中代码,可以用名为“it”的变量访问参数。
闭包的返回值和函数的返回值定义方式是一样的:如果有return语句,则返回值是return语句后面的内容;如果没有return语句,则闭包内的最后一行代码就是它的返回值。
行了先记录到此。最后附上链接:
百度百科:闭包
网友评论