- 浏览: 599406 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
闭包是一个函数,返回值依赖于声明在函数外部的一个或多个变量。
闭包通常来讲可以简单的认为是可以访问一个函数里面局部变量的另外一个函数。
如下面这段匿名的函数:
函数体内有一个变量 i,它作为函数的一个参数。如下面的另一段代码:
在 multiplier 中有两个变量:i 和 factor。其中的一个 i 是函数的形式参数,在 multiplier 函数被调用时,i 被赋予一个新的值。然而,factor不是形式参数,而是自由变量,考虑下面代码:
这里我们引入一个自由变量 factor,这个变量定义在函数外面。
这样定义的函数变量 multiplier 成为一个"闭包",因为它引用到函数外面定义的变量,定义这个函数的过程是将这个自由变量捕获而构成一个封闭的函数。
完整实例
执行以上代码,输出结果为:
闭包通常来讲可以简单的认为是可以访问一个函数里面局部变量的另外一个函数。
如下面这段匿名的函数:
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
发表评论
文章已被作者锁定,不允许评论。
-
Scala 在Intellij中搭建Scala环境(jdk8,scala2.11.4)
2017-06-02 16:33 14431.打开Intellij然后点击File->Plugin ... -
Scala Partial Functions(偏函数)学习
2017-04-24 10:54 344如果你想定义一个函数,而让它只接受和处理其参数定义域范围内的子 ... -
Scala 样本类(case class)和模式匹配(match)学习
2017-04-20 18:20 833样本类(case clas)和模式 ... -
Scala 作业题练习纪录
2017-04-20 14:39 10021.用reduceLeft获取集合中最大元素 println ... -
Scala 各种符号的含义(->,:::,::,<-,=>)
2017-04-20 09:50 651:::运算符 :::(三个冒号)表示List的连接操作,比如: ... -
Scala filter方法过滤集合元素(获取集合中的元素)
2017-04-19 14:44 2079Problem 你想要筛选出集合中的一些元素形成一个新的集合 ... -
Scala apply方法学习(类和对象都存在apply方法)
2017-04-19 10:18 731Scala比Java更面向对象的一个方面是Scala没有静态成 ... -
Scala Map(映射)学习
2017-04-18 09:20 431Map(映射)是一种可迭代的键值对(key/value)结构。 ... -
Scala 元组Tuple学习
2017-04-17 16:12 641元组是Scala提供的一种 ... -
Scala 函数之map(返回集合)、reduce、flatMap、zip和foreach(无返回值)学习
2017-04-17 15:04 2231map和flatMap的区别 object collect ... -
Scala 符号 => 的用法(匿名函数(x:Int)=>x+1)
2017-04-17 10:58 6991. 表示函数的类型(Function Type) de ... -
Scala 下划线(_)的多种应用场景学习
2017-04-13 20:00 5881、作为“通配符”,类似Java中的*。如import sca ... -
Scala mkString方法(把一个集合转化为一个字符串)
2017-04-13 19:34 1207Problem 如果你想要把集合元素转化为字符串,可能还会添加 ... -
Scala yield案例 (for 循环和 yield 的例子)
2017-04-13 18:42 629下面是摘自 《Programming in Scala》关于 ... -
Scala 基本概念学习
2017-04-13 14:40 537Type Inference类型推断 当你声明的任何变量时,你 ...
相关推荐
- **详尽深入的解释**:书中不仅提供代码示例,更重要的是深入解析背后的原理和机制,帮助读者透彻理解Scala的各项功能。 - **循序渐进的学习路径**:内容编排合理,每一章都建立在前一章的基础上,逐步深化对Scala...
此外,可能会涉及到的高级主题包括Akka(一个用于构建高度并发、分布式的应用程序的框架),以及Scala的函数式编程特性,如高阶函数、柯里化、闭包和Monad。对于想要深入了解Scala的人来说,这些内容是必不可少的。 ...
本篇文章将深入探讨Scala-2.11.8的源码,帮助你理解其核心机制和设计原理。 首先,Scala-2.11.x系列是针对Java平台的JVM(Java Virtual Machine)编译的。这个版本主要关注性能优化、库增强以及对Java 8的支持。...
书中可能包括变量和常量的声明、模式匹配、类型系统、类和对象的设计、函数式编程概念如高阶函数和闭包,以及Scala中的并发处理。此外,它还可能讨论如何利用Scala的Actor模型进行分布式计算,以及如何与其他Java或...
本书“Scala编程”PDF版,为学习者提供了深入理解Scala语言的宝贵资源。通过这本书,你可以从零基础开始,逐步掌握Scala的核心概念和实践技巧。以下是一些关键的知识点: 1. **基本语法与数据类型**:Scala有丰富的...
这本书深入介绍了Scala语言,涵盖了从基础语法到高级特性的全方位内容,旨在帮助读者理解和掌握这门多范式编程语言。 Scala融合了面向对象和函数式编程的概念,提供了简洁而强大的语法。在书中,作者首先讲解了...
"Scala Tutorial"可能是为初学者设计的,它通常会涵盖基础语法,如变量声明、数据类型、控制流结构、类与对象的定义,以及函数式编程的基础概念,如高阶函数和闭包。此外,教程可能还会介绍如何使用Scala的模式匹配...
《Scala语言规范》是理解这种语言的基础,特别是对于那些想要深入学习Apache Spark或其他基于Scala的大数据处理框架的开发者来说,这本书具有极高的价值。 1. **类型系统**:Scala的类型系统是静态的,这意味着在...
本讲义中将通过实际案例,如创建简单的类、函数调用、RDD操作、DataFrame读写等,让你深入理解Scala的用法。每个实例都会详细解释步骤和逻辑,帮助你在实践中掌握Scala编程。 总之,"Scala入门精华讲义"是一份全面...
9. 控制抽象:Scala允许开发者定义新的控制结构,类似于控制抽象,来使代码更加简洁和易于理解。 10. 组合与继承:Scala允许通过组合和继承的方式来构建模块化和可复用的程序结构。 11. 特质:特质在Scala中用于...
6. **函数式编程**:Scala的函数式编程特性包括柯里化、尾递归、闭包和monads等。例如,`f.curry` 将一个接受两个参数的函数转换为接受一个参数并返回另一个函数的形式。 7. ** Actors模型**:Scala提供了内置的...
学习Scala可以提升你的编程能力,帮助你构建高性能、可扩展的系统,尤其是在大数据处理和云计算领域,例如Apache Spark就是用Scala编写的,使用Scala能够更好地理解和操作Spark的API。总的来说,"scala-2.12.7.zip...
Scala-2.12.8源码包是Scala编程语言的2.12.8版本的源代码,允许开发者深入理解其内部工作原理,进行调试、扩展或定制。以下是关于Scala-2.12.8源码包的一些关键知识点: 1. **类型系统**:Scala的类型系统是其强大...
本压缩包提供的"Scala编程.pdf"是一份面向机器学习的Scala编程实战教程,旨在帮助读者深入理解和掌握Scala语言,并将其应用于实际的机器学习项目中。 首先,让我们了解Scala的基础。Scala运行在Java虚拟机(JVM)上...
2. **函数式编程**:Scala提供了高阶函数、柯里化、闭包和尾递归等特性,鼓励无副作用的编程风格。 3. **面向对象编程**:Scala的类、对象和继承机制与Java类似,但更加强调单例对象和模块化设计。特质(Trait)是...
- **函数式编程:** Scala支持高阶函数、闭包和尾递归,而Java 8才开始引入这些概念。 - **语法简洁性:** Scala的语法比Java更加紧凑,例如使用`val`和`var`声明变量,而非Java的`public static void main(String...
函数式编程是 Scala 的另一大特色,书中会讲解函数作为一等公民的概念,以及高阶函数、闭包和柯里化等重要特性。同时,Scala 提供了丰富的集合库,支持各种操作,如映射、过滤、折叠等,这些在书中会有详尽的实例...
Scala-2.10.7是该语言的一个特定版本,它的源码对于深入理解Scala的工作原理、学习高级编程技巧以及参与开源项目开发具有重要意义。在这个版本中,我们可以看到Scala语言的关键组件和实现细节。 1. 类和对象:Scala...