`
bit1129
  • 浏览: 1069814 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【Scala十四】Scala核心八:闭包

 
阅读更多

Free variable A free variable of an expression is a variable that’s used inside the expression but not defined inside the expression. For instance, in the function literal expression (x: Int) => (x, y), both variables x
and y are used, but only y is a free variable, because it is not defined inside the expression.


Bound variable A bound variable of an expression is a variable that’s both used and defined inside the expression. For instance, in the function literal expression (x: Int) => (x, y), both variables x and y are used,
but only x is bound, because it is defined in the expression as an Int and the sole argument to the function described by the expression.

 

 

closure A function object that captures free variables, and is said to be “closed” over the variables visible at the time it is created.

闭包是一个函数对象,当闭包中的自由变量绑定了具体的值后,称之为闭包

 

 

问题:

对于闭包(x: Int) => (x, y),当闭包建立后,y的值发生改变,调用闭包时,y的值是建立时的值还是改变的值?答案是改变后的值。也就是说,闭包函数是在调用执行时才从当前的上下文中获取到y的值

 

 

 

package spark.examples.scala.closure

object ClosureTest {

  def sum(args: List[Int]) = {
    var sum = 0
    //sum += _是函数常量,其中sum是自由变量
    val calc = sum += (_: Int)
    args.foreach(calc)
    println("sum1: " + sum) //6, sum是自由变量,计算结束后,sum的值在闭包内的变化,能够在外面也看到
    args.foreach(calc) //sum的值改变后,函数常量能够看到这个变化,再次计算结果12
    println("sum2: " + sum) //12,
  }

  def increaseBy(offset: Int) = {

    def add(x: Int) = {
      x + offset
    }
    add _
    //方法体可以直接使用 (x: Int) => x + offset
  }

  def main(args: Array[String]) {
    val args = List(1, 2, 3)
    sum(args)
    println(increaseBy(10)(100)) //110
  }
}

 

 

 

 

分享到:
评论

相关推荐

    尚硅谷_韩顺平_Scala语言核心编程_PDF密码解除1

    《Scala语言核心编程》是尚硅谷教育机构韩顺平老师主讲的一门课程,主要针对Scala这门多范式编程语言进行深入讲解。Scala是一种静态类型的编程语言,它融合了面向对象和函数式编程的概念,设计目标是提供一种简洁、...

    scala sdk scala-2.12.3

    Scala SDK,全称为Scala Software Development Kit,是用于开发Scala应用程序的核心工具集。Scala是一种多范式的编程语言,融合了面向对象和函数式编程的特点,它运行在Java虚拟机(JVM)上,能够充分利用Java生态...

    scala入门精华讲义

    3. 闭包:闭包是能够访问其自身作用域外变量的函数,这是函数式编程中的一个重要概念。 四、Spark与Scala结合 1. RDD(弹性分布式数据集):Spark的核心数据结构,是可分区的、只读的、容错的数据集合。Scala的API...

    scala2.12.1Windows镜像包

    Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念。这个"scala2.12.1Windows镜像包"是为Windows操作系统设计的Scala编程环境的安装包,版本号为2.12.1。Scala 2.12.x系列是其重要的一个稳定...

    Scala编程 pdf

    通过这本书,你可以从零基础开始,逐步掌握Scala的核心概念和实践技巧。以下是一些关键的知识点: 1. **基本语法与数据类型**:Scala有丰富的数据类型,包括基本类型(如Int、Double、Boolean等)和复合类型(如...

    scala-2.12.10.tgz

    7. 函数式编程:Scala支持高阶函数、闭包和不可变数据结构,这些都是函数式编程的核心特性。这使得编写并发程序更加安全和高效。 8. 面向对象编程:Scala是面向对象的,支持类、接口、继承和多态。它还引入了特质...

    Scala考试题1

    Scala 是一种多范式的编程语言,它融合了面向对象和函数式编程的特性。下面将详细解释题目中涉及的Scala知识点: 1. **var、val 和 def 的区别**: - `var` 定义可变变量,可以多次赋值。 - `val` 定义不可变变量...

    scala-2.12.7.zip

    Scala的核心特性包括: 1. **类型系统**:Scala具有静态类型的特性,能够确保代码在编译期间就消除错误。它的类型推断机制可以减少冗余的类型声明。 2. **面向对象**:Scala支持类、接口和继承,同时引入了特质...

    Scala函数和闭包.md

    Scala函数和闭包

    韩顺平_Scala语言核心编程 .zip

    Scala是一种强类型、静态类型的编程语言,由Martin Odersky在2003年创建,它的名字来源于...通过阅读尚硅谷-韩顺平_Scala语言核心编程.pdf,你可以深入理解Scala语言的核心概念,并掌握如何在实际项目中运用这些知识。

    Scala程序设计第二版

    3. **函数式编程**:Scala对函数式编程的支持是其一大特色,包括高阶函数、匿名函数、闭包、函数作为一等公民、柯里化、尾递归优化等。书本将详细解释这些概念及其在Scala中的应用。 4. **模式匹配**:Scala的模式...

    scala中文教程(java 平台开发语言 scala 简单教程)

    #### 三、Scala的核心概念详解 1. **类与对象**:Scala中的类和对象概念与Java类似,但更加简洁。例如,可以使用`object`关键字创建单例对象,这在Scala中非常常见。 2. **基本类型和操作**:Scala支持各种基本数据...

    Scala 闭包

    Scala 闭包 闭包是一个函数,返回值依赖于声明在函数外部的一个或多个变量。 闭包通常来讲可以简单的认为是可以访问一个函数里面局部变量的另外一个函数。 如下面这段匿名的函数: val multiplier = (i:Int) => i ...

    scala例子 实例

    Scala的核心特性包括: 1. 面向对象编程:Scala是完全支持面向对象的,它允许我们定义类、对象和接口。类可以通过继承来扩展功能,而对象可以作为单例对象使用,避免了Java中的全局变量问题。 2. 函数式编程:...

    scala-2.11.12 win msi 安装包

    4. **函数式编程**:Scala深受函数式编程语言如Lisp和Haskell的影响,支持高阶函数、闭包、不可变数据结构以及模式匹配等功能。 5. **类型推断**:Scala的类型系统能自动推断许多变量和表达式的类型,减少了代码的...

    programming in scala, 3nd edition

    - **广泛的覆盖范围**:除了Scala核心语言外,还介绍了如容器、actor等重要的Scala库和框架,为读者提供了更全面的学习资源。 #### 核心语言特性 - **类型推断**:Scala拥有强大的类型系统,可以在很多情况下自动...

    scala-2.12.11.zip

    Scala的核心特性包括: 1. **类型系统**:Scala具有强大的静态类型系统,能够确保程序的健壮性。它引入了类型推断,允许开发者编写更简洁的代码,同时仍然保持类型安全。 2. **模式匹配**:Scala支持模式匹配,这...

    scala-2.7.5.final

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

    Scala语言规范.pdf

    高阶函数、柯里化、闭包和不可变数据结构是其核心特性。 4. **模式匹配**:Scala的模式匹配允许开发者在代码中解构复杂数据结构,这是一种强大的控制流构造,常用于处理枚举、列表和其他集合。 5. ** Actors模型**...

Global site tag (gtag.js) - Google Analytics