闭包是一个函数,返回值依赖于声明在函数外部的一个或多个变量。

闭包通常来讲可以简单的认为是可以访问一个函数里面局部变量的另外一个函数。

如下面这段匿名的函数:

val multiplier = (i:Int) => i * 10  

函数体内有一个变量 i,它作为函数的一个参数。如下面的另一段代码:

val multiplier = (i:Int) => i * factor

在 multiplier 中有两个变量:i 和 factor。其中的一个 i 是函数的形式参数,在 multiplier 函数被调用时,i 被赋予一个新的值。然而,factor不是形式参数,而是自由变量,考虑下面代码:

var factor = 3
val multiplier = (i:Int) => i * factor  

这里我们引入一个自由变量 factor,这个变量定义在函数外面。

这样定义的函数变量 multiplier 成为一个"闭包",因为它引用到函数外面定义的变量,定义这个函数的过程是将这个自由变量捕获而构成一个封闭的函数。

完整实例

object Test {  def main(args: Array[String]) {  println( "muliplier(1) value = " +  multiplier(1) )  println( "muliplier(2) value = " +  multiplier(2) )  }  var factor = 3  val multiplier = (i:Int) => i * factor
}  

执行以上代码,输出结果为:

muliplier(1) value = 3
muliplier(2) value = 6  

转载于:https://www.cnblogs.com/DeepRunning/p/9205963.html

scala(10)-----Scala 闭包相关推荐

  1. 13.10 Scala中使用JSON.toJSONString报错:ambiguous reference to overloaded definition

    13.10 Scala中使用JSON.toJSONString报错:ambiguous reference to overloaded definition 问题描述: [ERROR] /Users/ ...

  2. Scala教程– scala.io.Source,访问文件,flatMap,可变地图

    前言 这是面向初学者的Scala教程的第8部分. 该博客上还有其他文章,您可以在我正在为其创建的计算语言学课程的链接页面上找到这些链接和其他资源. 此外,您可以在" JCG Java教程&q ...

  3. [Scala基础]--Scala构建超过22个元素的class

    一.背景 1.在scala-2.10.x版本种,case class的元素超过22个以后即会编译报错 2.有些业务场景下,需要超过22个元素的值 二.如何解决 Scala提供了解决方案,即使用类实现P ...

  4. Scala之——Scala容器库(Scala’s Collections Library)

    简介(Introduction) Martin Odersky和Lex Spoon 在许多人看来,新的集合框架是Scala 2.8中最显著的改进.此前Scala也有集合(实际上新框架大部分地兼容了旧框 ...

  5. 【scala】 scala 条件控制 和异常处理(二)

    [scala] scala 条件控制 和异常处理(二) 参考文章: (1)[scala] scala 条件控制 和异常处理(二) (2)https://www.cnblogs.com/lonelywo ...

  6. 【IDEA】Warning:scala: skipping Scala files without a Scala SDK in module(s) systemimport

    文章目录 1.概述 1.概述 表现特征,project里面的build.scala的任何东西都不生效,提示一片红,如此操蛋. 打开src目录下的scala源代码提示 no Scala SDK in m ...

  7. 【Scala】Scala 部署和安装

    文章目录 一.Scala 简介 二.安装 三.配置 IDEA 直接下载插件 自主下载插件引入(推荐) 一.Scala 简介 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷 ...

  8. scala php,Scala 教程

    Scala 教程 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性. Scala 运行在Java虚拟机上,并兼容现有的Java程序 ...

  9. JDK1.10+scala环境的搭建之linux环境(centos6.9)

    ---恢复内容开始--- 第一步:安装jdk1.10版本 进入网页 http://oracle.com/technetwork/java/javase/downloads/index.html  下载 ...

  10. java11 scala_JDK1.10+scala环境的搭建之windows环境

    第一步:安装jdk 1,http://www.oracle.com/technetwork/java/javase/downloads/jdk10-downloads-4416644.html 去找下 ...

最新文章

  1. GDCM:将PAPYRUS 3.0文件转换为dcm文件的的测试程序
  2. 浅析去中化区块链游戏资产交易平台
  3. Apache RocketMQ在linux上的常用命令
  4. Fiddler Everywhere全平台抓包调试工具安装和使用(一)
  5. Excel中快速调整行高或列宽为适合内容显示的长度
  6. 详解EMC测试国家标准GB/T 17626
  7. MATLAB强化学习实战(三) 使用并行计算训练DQN智能体进行车道保持辅助(LKA)
  8. SQL Server evaluation period has expired
  9. HTML 代码混淆与压缩
  10. 计算机系统结构复习(四):Pipelining流水线
  11. 企业上市需要哪些条件
  12. 诺基亚结盟微软走上ARM星光大道
  13. Chemical Peel Treatment For Acne Scars
  14. SRS4.0源码分析-调试环境搭建
  15. eclipse 配置汤姆猫Tomcat
  16. Word2vec之CBOW
  17. iApp开发彩虹易支付APP源码+支持大多数
  18. 拥有着12万亿市场的部件,主角:射频
  19. c# 将数据导出到EXCEL文件(一)
  20. matlab 向量的定义方法

热门文章

  1. 开源MSSQL Express Profile 文件
  2. centos 中设置网卡等相关参数
  3. 《构建之法》第8,9,10章
  4. DEDECMS 关键字不能小于2个字节!
  5. HTML5中微数据在搜索引擎中的使用举例
  6. poj Alice's Chance(最大流解题)
  7. 诗与远方:无题(七十四)
  8. 诗与远方:无题(十五)
  9. Ranger-Sqoop2插件安装
  10. Java中==和equals、equals和hashCode的关系详解