首页 > 其他 > 详细

函数式编程-->closure

时间:2016-03-02 00:22:22      阅读:124      评论:0      收藏:0      [点我收藏+]

所谓闭包,实际上是一种特殊的函数,它在暗地里绑定了函数内部引用的所有变量。换句话说,这种函数(或方法)把它引用的所有东西都放在一个上下文里“包”起来了。

Groovy语言中闭包绑定的简单示例

class Employee{

      def name,salary
}

def paidMore(amount){
return {Employee e -> e.salary > amount} }
isHighPaid
= paidMore(100000)

执行闭包

def Smithers = new Employee(name:"Fred", salary:120000)
def Homer = new Employee(name:"Homer", salary:80000)
println isHighPaid(Smithers)
println isHighPaid(Homer)
// true, false

绑定另一个闭包

isHigherPaid = paidMore(200000)
println isHigherPaid(Smithers)
println isHigherPaid(Homer)
def Burns = new Employee(name:"Monty", salary:1000000)
println isHigherPaid(Burns)
// false, false, true

闭包的原理

def Closure makeCounter(){
    
   def local_variable
= 0 return { return local_variable += 1 //[1] } c1 = makeCounter() //[2] c1()         //[3] c1() c1() c2 = makeCounter() //[4] println "C1 = ${c1(),C2 = ${c2()}" //output: C1 = 4, C2 = 1 //[5]

[1]函数的返回值是一个代码块,而不是一个值。

[2]c1现在指向代码块的一个实例。

[3]调用c1将递增其内部变量,如果这个时候输出,其结果会是1。

[4]c2现在指向makeCounter()的一个全新实例,与其他实例没有关联。

[5]每个实例的内部状态都是独立的,各自拥有一份local_variable。

函数式编程-->closure

原文:http://www.cnblogs.com/ducong/p/5232730.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!