我很不明白为什么,一个可以作参数传递的,含有自由变量的函数 叫闭包。
  例如 set.foreach(println (x:Int)) ,,println(x:Int)被叫做闭包
  表示对集合set中所有元素调用println ,打印之(伪代码)
如果函数的 前域(参数的取值集合)是A(这里没有参数),值域是B(打印的序列集合),  整个函数是 集合AUB上的二元关系 R, println(x:Int) 记为S。
S究竟是什么的闭包。如果是 R 的闭包,那是什么闭包,传递,自反,对称,都不像阿。还是根本的,这个闭包的概念不是关系运算中的概念

解决方案 »

  1.   

     闭包是可以包含自由(未绑定)变量的代码块;这些变量不是在这个代码块或者任何全局上下文中定义的,而是在定义代码块的环境中定义。“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量的存在,相关变量引用没有释放)和为自由变量提供绑定的计算环境(作用域)。在 Scheme、Common Lisp、Smalltalk、Groovy、JavaScript、Ruby 和 Python 等语言中都能找到对闭包不同程度的支持。
      

  2.   

    楼主是不是在研究scala?用最大众的方式理解闭包,建议你去看看《javascript语言精粹》,有电子版下载。
    在JavaScript中闭包的优点比较明显。在了解javascript的基础上你再看2楼的解释才有体会以scala来看,print(x: Int)好像不能称之为闭包吧,只是一个函数调用。
      

  3.   

    developerWorks 有几篇
    http://www.ibm.com/search/csass/search/?q=%E9%97%AD%E5%8C%85&dws=cndw&ibm-submit=&sn=dw&lang=zh&cc=CN&ddr=&en=utf&lo=zh&hpp=20
      

  4.   

    这里println明显是闭包,完整写法是 x:T => Unit
      

  5.   

    jdk7没用过啊,java中使用闭包,程序的复杂性就太高了,得乱死