- Scala 教程
- Scala - 首页
- Scala - 概述
- Scala - 特性
- Scala - 环境设置
- Scala - 构建工具 (SBT)
- Scala - 基本语法
- 数据类型和变量
- Scala - 数据类型
- Scala - 变量
- Scala - 字符串
- Scala - 数组
- Scala 运算符
- Scala - 运算符
- Scala - 算术运算符
- Scala - 关系运算符
- Scala - 逻辑运算符
- Scala - 位运算符
- Scala - 赋值运算符
- Scala 条件语句
- Scala - IF ELSE
- Scala 循环语句
- Scala - 循环语句
- Scala - while 循环
- Scala - do-while 循环
- Scala - for 循环
- Scala - break 语句
- Scala 类与对象
- Scala - 类与对象
- Scala - 访问修饰符
- Scala 方法与函数
- Scala - 函数
- Scala - 按名称调用的函数
- Scala - 带命名参数的函数
- Scala - 带可变参数的函数
- Scala - 递归函数
- Scala - 默认参数值
- Scala - 高阶函数
- Scala - 嵌套函数
- Scala - 匿名函数
- 部分应用函数
- Scala - Currying 函数
- Scala 集合
- Scala - 集合
- Scala - 列表
- Scala - 集合
- Scala - 映射
- Scala - 元组
- Scala - 迭代器
- Scala - Options
- Scala 模式匹配
- Scala - 模式匹配
- Scala - 异常处理
- Scala - 提取器
- Scala - 正则表达式
- Scala 文件 I/O
- Scala - 文件 I/O
- Scala 高级概念
- Scala - 闭包
- Scala - 特质
- Scala 有用资源
- Scala - 快速指南
- Scala - 在线编译器
- Scala - 有用资源
- Scala - 讨论
Scala - 闭包
闭包是一个函数,其返回值取决于在此函数之外声明的一个或多个变量的值。
以下代码片段使用了匿名函数。
val multiplier = (i:Int) => i * 10
这里函数体中唯一使用的变量 i * 10 是 i,它被定义为函数的参数。尝试以下代码:
val multiplier = (i:Int) => i * factor
multiplier中有两个自由变量:i和factor。其中一个,i,是函数的形式参数。因此,每次调用multiplier时,它都会绑定到一个新的值。但是,factor不是形式参数,那它是什么呢?让我们再添加一行代码。
var factor = 3 val multiplier = (i:Int) => i * factor
现在factor引用了函数外部但在封闭作用域中的变量。函数引用factor并在每次调用时读取其当前值。如果一个函数没有外部引用,那么它本身就是一个简单的闭包。不需要外部上下文。
尝试以下示例程序。
示例
object Demo {
def main(args: Array[String]) {
println( "multiplier(1) value = " + multiplier(1) )
println( "multiplier(2) value = " + multiplier(2) )
}
var factor = 3
val multiplier = (i:Int) => i * factor
}
将上述程序保存为Demo.scala。以下命令用于编译和执行此程序。
命令
\>scalac Demo.scala \>scala Demo
输出
multiplier(1) value = 3 multiplier(2) value = 6
广告