scala中闭包的使用
2024-10-07 19:55:12
闭包的实质就是代码与用到的非局部变量的混合,即:
闭包 = 代码 + 用到的非局部变量
实例1: 匿名函数中引入闭包
val multiplier = (i:Int) => i * factor
在 multiplier 中有两个变量:i 和 factor。其中的一个 i 是函数的形式参数,在 multiplier 函数被调用时,i 被赋予一个新的值。然而,factor不是形式参数,而是自由变量,考虑下面代码:
var factor =
val multiplier = (i:Int) => i * factor
这里我们引入一个自由变量 factor,这个变量定义在函数外面。
这样定义的函数变量 multiplier 成为一个"闭包",因为它引用到函数外面定义的变量,定义这个函数的过程是将这个自由变量捕获而构成一个封闭的函数。
完整实例
object Test {
def main(args: Array[String]) {
println( "muliplier(1) value = " + multiplier() )
println( "muliplier(2) value = " + multiplier() )
}
var factor =
val multiplier = (i:Int) => i * factor
}
实例2: 定义函数中引入闭包
def multiplier(factor :Int) = (i:Int) => i * factor
在定义的函数中使用闭包factor为参数,返还值为一个函数
完整实例
object Test {
def main(args: Array[String]) {
val higth = multiplier()
println( "higth(2) value = " + higth() )
} def multiplier(factor :Int) = (i:Int) => i * factor
}
最新文章
- Spring学习记录1--@Transactional Propagation
- 自定义ViewGroup须知
- ie浏览器 jsp中链接参数为中文的处理
- javascript 红宝书笔记之操作日期
- Python中is和==的区别
- ROM, RAM, Flash Memory
- hdoj 5355 Cake(分析+二分)
- dive into python 读笔(3)
- 使用Socket模拟一个简单的Webservice调用
- HBase MultiVersionConsistencyControl
- oracle的一知半解
- js到底new了点啥
- C# T4 模板 数据库实体类生成模板(带注释,娱乐用)
- luogu P2000 拯救世界
- happens-before俗解
- jsp forward跟redirect区别
- Scrum Meeting 12 -2014.11.18
- 108. Convert Sorted Array to Binary Search Tree 109. Convert Sorted List to Binary Search Tree -- 将有序数组或有序链表转成平衡二叉排序树
- 1027代码审计平台 1-sonar scanner
- 【OpenWRT】网络配置