scala学习之函数
2015-08-15 11:58
162 查看
scala是一种多范式编程语言,其特色之一就是函数式编程,本节就来学习它!
在变量中存放函数
匿名函数
高阶函数
在scala中,函数可以作为函数的参数,比如
这个函数接受任何Double并返回Double类型的函数
这种接收一个函数参数的函数 就被称作为高阶函数。
高阶函数也可以产出另一个函数:
常用的高阶函数
声明下,这个不会得到你想要的结果,即 0.1 0.2 0.3 …
这个是所有的编程语言都会出现的问题,scala不是个例,至于原因,请参考这里
闭包
曾经学习JS时,闭包是我最痛苦的回忆,后来我看到过一个关于闭包比较好理解的解释:当一个函数返回了一个函数后,其内部的局部变量还被新函数引用。
triple 和 half 都有各自的对函数的引用,这样的函数成为闭包,闭包由代码和代码用到的任何非局部变量定义构成。
在变量中存放函数
val num = 3.14 val fun = ceil _ // _将ceil方法转换成了函数 println(fun(num)) val array = Array(3.14,1.4,2.0).map(fun) // 4.0 2.0 2.0
匿名函数
val triple = (x:Double) => x*3 println(triple(2.0)) Array(3.14,1.4,2.0).map((x:Double) => x*3)
高阶函数
在scala中,函数可以作为函数的参数,比如
def value(f:(Double) => Double) = f(2.5)
这个函数接受任何Double并返回Double类型的函数
value(sqrt _)
这种接收一个函数参数的函数 就被称作为高阶函数。
高阶函数也可以产出另一个函数:
def mulBy(factory : Double) = (x:Double) => x*factory print(mulBy(3)(20)) //60
常用的高阶函数
(1 to 9) map(0.1 * _) foreach( println _)
声明下,这个不会得到你想要的结果,即 0.1 0.2 0.3 …
0.1 0.2 0.30000000000000004 0.4 0.5 0.6000000000000001 0.7000000000000001 0.8 0.9
这个是所有的编程语言都会出现的问题,scala不是个例,至于原因,请参考这里
(1 to 100) filter (_ % 3 == 0) foreach (println _) (1 to 9) reduceLeft(_*_) "scala is a program run on JVM".split(" ").sortWith(_.length < _.length) foreach( println _)
闭包
曾经学习JS时,闭包是我最痛苦的回忆,后来我看到过一个关于闭包比较好理解的解释:当一个函数返回了一个函数后,其内部的局部变量还被新函数引用。
def mulBy(factory: Double) = (x: Double) => x * factory val triple = mulBy(3) val half = mulBy(0.5)
triple 和 half 都有各自的对函数的引用,这样的函数成为闭包,闭包由代码和代码用到的任何非局部变量定义构成。
相关文章推荐
- 数组和指针的区别
- Android的提交数据到服务器
- 使用 rsync 服务(二)
- struts2学习笔记(九)struts2内置校验
- LLBLGen Pro v4.2_Patch+Keygen
- 简化IT程序员工作生活的4个窍门
- java中的并行模式之Master-Worker模式
- js漂浮广告实现代码
- android profile memory usage
- hive 配置
- perl环境配置以及Eclipse安装perl开发插件
- 算法-MergeSort
- 最小生成树之kruskal算法
- 网络安全系列之1:安全能力地图简介
- Tomcat修改端口
- 社保压缩
- hdu 5386 Cover(暴力)
- C++基础---编译过程浅析
- 程序员什么时候该考虑辞职
- 公司高层的区别