闭包的实质就是代码与用到的非局部变量的混合,即:

闭包 = 代码 + 用到的非局部变量

实例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
}

最新文章

  1. Spring学习记录1--@Transactional Propagation
  2. 自定义ViewGroup须知
  3. ie浏览器 jsp中链接参数为中文的处理
  4. javascript 红宝书笔记之操作日期
  5. Python中is和==的区别
  6. ROM, RAM, Flash Memory
  7. hdoj 5355 Cake(分析+二分)
  8. dive into python 读笔(3)
  9. 使用Socket模拟一个简单的Webservice调用
  10. HBase MultiVersionConsistencyControl
  11. oracle的一知半解
  12. js到底new了点啥
  13. C# T4 模板 数据库实体类生成模板(带注释,娱乐用)
  14. luogu P2000 拯救世界
  15. happens-before俗解
  16. jsp forward跟redirect区别
  17. Scrum Meeting 12 -2014.11.18
  18. 108. Convert Sorted Array to Binary Search Tree 109. Convert Sorted List to Binary Search Tree -- 将有序数组或有序链表转成平衡二叉排序树
  19. 1027代码审计平台 1-sonar scanner
  20. 【OpenWRT】网络配置

热门文章

  1. NGINX配置之一:日志篇
  2. Openstack组建部署 — Glance Install
  3. Windows的安全模型
  4. 剑指offer第二版面试题6:重建二叉树(JAVA版)
  5. 注解@Override
  6. ubuntu 无pthread
  7. Java 序列化和反序列化(二)Serializable 源码分析 - 1
  8. leetcode.字符串.696计数二进制子串-java
  9. Pandas分类数据和顺序数据转换为标志变量
  10. USACO2012 overplanting /// 矩阵切割 递归 oj21547