先说什么是闭包
什么是闭包呢
代数集合中的闭包是一个集合经过某个类型的闭包运算,生成了一个含有之前集合的新集合,代数关系中的闭包是一个关系经过某种闭包运算生成了一个含有之前关系的新关系,计算机中的闭包也很类似,一个作用域内的变量经过某种闭包运算新生成了一个包含之前作用域的作用域;可见闭包这个词是一个闭包运算后的***结果***,闭包运算也就是一个元素按某种规律增添的运算;
现在在说说什么是lambda表达式
什么是lambda表达式
lambda表达式也叫λ表达式,它是基于λ演算的,也就是说具备λ演算的部分功能,那什么又是λ演算呢,具体的细节请大家自己搜索,简单的说就是λ演算是一个为了研究逻辑问题的可计算性,可以模拟图灵机执行的符号计算表达式,最原始的符号编程语言代数表达,它的构成只有函数,函数的参数也是函数,返回值也是函数,函数被输入一个固定输入值后返回一个确定的值。计算中的lambda表达式就是一个匿名函数,和λ演算一样,这个表达式就是λ演算内的函数,在编程语言支持lambda表达式后,函数的类型就变成了两类,原本的普通函数和匿名的λ函数,λ函数具备λ演算的性质,普通函数的参数可以作为λ函数,在java中λ函数还有额外的功能是实现函数接口;其他语言也许也有其他利用λ函数增加的额外功能;
λ表达式和闭包的关系
有时候常常会见到,λ表达式就是闭包,为啥λ表达式和闭包扯上了关系呢,你看计算机编程中的闭包是怎么实现的,一个作用域不就是一个函数,闭包运算是怎么运算的,就是往一个函数内写一个λ函数,外部函数变量加上内部λ函数的变量是不是变量就增加了,这不就是闭包运算,这个λ函数卸载函数内部就是闭包运算(当然不是λ函数而是普通函数也行但是需要语言的支持,python支持java不支持),但是内部λ函数是不能改变外部函数变量的值的,因为前面说过了,闭包运算是给集合增加新的元素,你改变了原来的变量那就不叫增加了,违背了闭包的原则意义,为啥闭包总和λ函数扯在一起,因为λ函数不就是写在函数内部的吗,把λ函数作为一个语句使用,所以λ函数成了编程语言闭包起作用的方式的步骤的一部分;