`

Scala 闭包理解

 
阅读更多
闭包是一个函数,返回值依赖于声明在函数外部的一个或多个变量。
闭包通常来讲可以简单的认为是可以访问一个函数里面局部变量的另外一个函数。
如下面这段匿名的函数:

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  
}


执行以上代码,输出结果为:
$ scalac Test.scala  
$  scala Test  
muliplier(1) value = 3  
muliplier(2) value = 6  


分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    programming in scala, 3nd edition

    - **详尽深入的解释**:书中不仅提供代码示例,更重要的是深入解析背后的原理和机制,帮助读者透彻理解Scala的各项功能。 - **循序渐进的学习路径**:内容编排合理,每一章都建立在前一章的基础上,逐步深化对Scala...

    学习scala好的项目

    此外,可能会涉及到的高级主题包括Akka(一个用于构建高度并发、分布式的应用程序的框架),以及Scala的函数式编程特性,如高阶函数、柯里化、闭包和Monad。对于想要深入了解Scala的人来说,这些内容是必不可少的。 ...

    scala-2.11.8源码

    本篇文章将深入探讨Scala-2.11.8的源码,帮助你理解其核心机制和设计原理。 首先,Scala-2.11.x系列是针对Java平台的JVM(Java Virtual Machine)编译的。这个版本主要关注性能优化、库增强以及对Java 8的支持。...

    Scala编程书合集

    书中可能包括变量和常量的声明、模式匹配、类型系统、类和对象的设计、函数式编程概念如高阶函数和闭包,以及Scala中的并发处理。此外,它还可能讨论如何利用Scala的Actor模型进行分布式计算,以及如何与其他Java或...

    Scala编程 pdf

    本书“Scala编程”PDF版,为学习者提供了深入理解Scala语言的宝贵资源。通过这本书,你可以从零基础开始,逐步掌握Scala的核心概念和实践技巧。以下是一些关键的知识点: 1. **基本语法与数据类型**:Scala有丰富的...

    Programming in Scala.pdf

    这本书深入介绍了Scala语言,涵盖了从基础语法到高级特性的全方位内容,旨在帮助读者理解和掌握这门多范式编程语言。 Scala融合了面向对象和函数式编程的概念,提供了简洁而强大的语法。在书中,作者首先讲解了...

    Scala 电子书

    "Scala Tutorial"可能是为初学者设计的,它通常会涵盖基础语法,如变量声明、数据类型、控制流结构、类与对象的定义,以及函数式编程的基础概念,如高阶函数和闭包。此外,教程可能还会介绍如何使用Scala的模式匹配...

    Scala语言规范.pdf

    《Scala语言规范》是理解这种语言的基础,特别是对于那些想要深入学习Apache Spark或其他基于Scala的大数据处理框架的开发者来说,这本书具有极高的价值。 1. **类型系统**:Scala的类型系统是静态的,这意味着在...

    scala入门精华讲义

    本讲义中将通过实际案例,如创建简单的类、函数调用、RDD操作、DataFrame读写等,让你深入理解Scala的用法。每个实例都会详细解释步骤和逻辑,帮助你在实践中掌握Scala编程。 总之,"Scala入门精华讲义"是一份全面...

    scala编程电子书

    9. 控制抽象:Scala允许开发者定义新的控制结构,类似于控制抽象,来使代码更加简洁和易于理解。 10. 组合与继承:Scala允许通过组合和继承的方式来构建模块化和可复用的程序结构。 11. 特质:特质在Scala中用于...

    快学Scala课后习题答案

    6. **函数式编程**:Scala的函数式编程特性包括柯里化、尾递归、闭包和monads等。例如,`f.curry` 将一个接受两个参数的函数转换为接受一个参数并返回另一个函数的形式。 7. ** Actors模型**:Scala提供了内置的...

    scala-2.12.7.zip

    学习Scala可以提升你的编程能力,帮助你构建高性能、可扩展的系统,尤其是在大数据处理和云计算领域,例如Apache Spark就是用Scala编写的,使用Scala能够更好地理解和操作Spark的API。总的来说,"scala-2.12.7.zip...

    scala-2.12.8 源码包

    Scala-2.12.8源码包是Scala编程语言的2.12.8版本的源代码,允许开发者深入理解其内部工作原理,进行调试、扩展或定制。以下是关于Scala-2.12.8源码包的一些关键知识点: 1. **类型系统**:Scala的类型系统是其强大...

    Scala编程.zip

    本压缩包提供的"Scala编程.pdf"是一份面向机器学习的Scala编程实战教程,旨在帮助读者深入理解和掌握Scala语言,并将其应用于实际的机器学习项目中。 首先,让我们了解Scala的基础。Scala运行在Java虚拟机(JVM)上...

    scala-2.7.5.final

    2. **函数式编程**:Scala提供了高阶函数、柯里化、闭包和尾递归等特性,鼓励无副作用的编程风格。 3. **面向对象编程**:Scala的类、对象和继承机制与Java类似,但更加强调单例对象和模块化设计。特质(Trait)是...

    一些scala实例

    - **函数式编程:** Scala支持高阶函数、闭包和尾递归,而Java 8才开始引入这些概念。 - **语法简洁性:** Scala的语法比Java更加紧凑,例如使用`val`和`var`声明变量,而非Java的`public static void main(String...

    快学Scala 中文版

    函数式编程是 Scala 的另一大特色,书中会讲解函数作为一等公民的概念,以及高阶函数、闭包和柯里化等重要特性。同时,Scala 提供了丰富的集合库,支持各种操作,如映射、过滤、折叠等,这些在书中会有详尽的实例...

    scala-2.10.7版本源码

    Scala-2.10.7是该语言的一个特定版本,它的源码对于深入理解Scala的工作原理、学习高级编程技巧以及参与开源项目开发具有重要意义。在这个版本中,我们可以看到Scala语言的关键组件和实现细节。 1. 类和对象:Scala...

Global site tag (gtag.js) - Google Analytics