函数、闭包及匿名函数(Lambda)
来源:互联网 发布:全球顶级域名注册局 编辑:程序博客网 时间:2024/05/16 14:44
- 函数
- 闭包
- 匿名函数
函数
函数是绑定了值,或用其它表达式替换变量时可被求值或应用(apply)的计算行为的抽象。
函数是一种具名或匿名的操作,其代码直到调用时才执行。在函数定义中,可能有也可能没有引用外部的自由变量(也即在函数定义之外定义的变量)。
闭包
闭包是一个在其定义中包含自由变量的函数,可能具名也可能匿名,并通过包含环境信息以绑定其引用的自由变量。
var factor = 2val multiplier = (i: Int) => i * factor //定义一个闭包multiplier(2) //4factor = 3multiplier(2) //6
factor并不是multiplier的参数,而是一个自由变量,是一个当前作用域中某个值的引用。所以,编译器创建了一个闭包,用于包含(或覆盖)multiplier与它引用的外部变量的上下文,从而就绑定了外部变量本身。由于multiplier引用了factor,每次调用时都会重新读取factor的值,所以当factor发生变化时multiplier也会跟着变化。
def factory: Int => Int = { var factor = 2 val multiplier = (i: Int) => { factor += 1 i * factor } multiplier}val multiplier = factory //返回一个闭包multiplier(2) //6multiplier(2) //8
当factor处于某个局部作用域(或某个方法)中,而将multiplier传递给其它作用域(或其它方法)时,上述机制依然有效,且自由变量factor的有效性会一直伴随着multiplier函数。
匿名函数
若函数非具名,则称其为匿名函数,在Scala也可将之称为Lambda函数或函数字面量。
用Lambda函数表示匿名函数来源于Lambda微积分,在Lambda微积分中用希腊字母Lambda(λ)来表示匿名函数。
Alonzo Chruch在数学的可计算理论中首先研究了Lambda微积分,在Lambda微积分中,将函数的特性总结为:函数是绑定了值,或用其它表达式替换变量时可被求值或应用(apply)的计算行为的抽象(apply一词就是我们Scala中经常用到的默认方法apply名字的来源)。
Lambda微积分也为函数表达式的简化、如何用值代替变量等定义了规则。
val double = (i: Int) => i * 2 //将匿名函数定义为一个值double
参考《Scala程序设计》第二版
- 函数、闭包及匿名函数(Lambda)
- 闭包函数 和 匿名lambda函数
- lambda函数,匿名函数
- PHP匿名函数及闭包
- PHP匿名函数及闭包
- 65-匿名函数及闭包
- 详谈JavaScript 匿名函数及闭包
- js 匿名函数及闭包
- 【C#】之匿名函数及Lambda表达式
- 匿名函数&闭包
- 匿名函数 & 闭包
- 匿名函数 闭包
- 闭包,匿名函数
- python 匿名函数lambda
- 匿名函数 & Lambda 表达式
- Python 匿名函数lambda
- lambda匿名函数
- python 匿名函数lambda
- 电脑入门知识
- JDBC连接数据库的步骤
- 兼容之ajax
- 2017年开始今年开始iOS 10设备上的app必须通过https且是TLS 1.2的协议去访问web资源
- WordPress 4.7.4 中文正式版发布
- 函数、闭包及匿名函数(Lambda)
- linux中结合find命令做文件批量处理等操作
- NUC1041 数字三角形【DP】
- Winsock的初始化
- Ubuntu安装过程中出现Out of Range
- 偏函数与偏应用函数
- poj 1952 最长子序列 计数加去重
- WiFI Display介绍
- Miracast及其相似技术名词解释