Scala 函数
2015-07-14 14:27
281 查看
a、方法和函数的对比
在Scala中,函数最常见的形式是定义在类中,这时就不叫做函数了,而是称为方法。在类中定义方法的一个缺点是方法可能会依赖类的状态(成员变量),存在副作用。而函数不会有这些情况。
在Scala中,函数表示为类型和对象,而方法却不是,方法仅和定义它的类型相关。但是Scala提供了一种转换处理,可以把类中的方法转为函数,称为“Eta expansion”。只需使用方法名加上下划线“_”即可把方法转为函数,如下例:
在该例中,通过在UseResource类中的use()方法后加上下划线,即可把use方法被转变为函数了。
b、高阶函数
高阶函数是指带有函数作为参数或返回值为函数的函数,就为高阶函数。常用的高阶函数为用于集合操作的map、flatMap、filter函数等。
详见:http://www.programmer.com.cn/13996/
c、函数柯里化
函数柯里化是指把带有多个参数的函数转变为一个接受单个参数的新函数的技术,新函数返回一个以原第二个参数为参数的函数。
如下例,是一个为柯里化的函数,实现对两个参数做加法运算
res10: Int = 5
从这个例子中可以看到,在使用add(2)时,返回的是一个函数,其具体应为(y: Int) => 2 + y,而在使用add(2)(3)时,这个返回的函数又接受了3作为参数的调用,返回结果5。如果使用res9(3)调用,也会得到同样的结果5。
另外,Scala的函数柯里化还可以做如下的简写:
d、偏函数和偏应用函数
详见http://blog.csdn.net/qiruiduni/article/details/46914397
e、闭包
在Scala中,函数最常见的形式是定义在类中,这时就不叫做函数了,而是称为方法。在类中定义方法的一个缺点是方法可能会依赖类的状态(成员变量),存在副作用。而函数不会有这些情况。
在Scala中,函数表示为类型和对象,而方法却不是,方法仅和定义它的类型相关。但是Scala提供了一种转换处理,可以把类中的方法转为函数,称为“Eta expansion”。只需使用方法名加上下划线“_”即可把方法转为函数,如下例:
class UseResource { def use(r: Resource): Boolean = {...} } val use_func: Resource => Boolean = (new UseResource).use _
在该例中,通过在UseResource类中的use()方法后加上下划线,即可把use方法被转变为函数了。
b、高阶函数
高阶函数是指带有函数作为参数或返回值为函数的函数,就为高阶函数。常用的高阶函数为用于集合操作的map、flatMap、filter函数等。
详见:http://www.programmer.com.cn/13996/
c、函数柯里化
函数柯里化是指把带有多个参数的函数转变为一个接受单个参数的新函数的技术,新函数返回一个以原第二个参数为参数的函数。
如下例,是一个为柯里化的函数,实现对两个参数做加法运算
scala> def add(x: Int, y: Int) = x + y add: (x: Int, y: Int)Int下面是一个实现了柯里化的函数,它将add方法的两个参数转变为一个接受单个参数的函数。
scala> def add(x: Int) = (y: Int) => x + y add: (x: Int)Int => Int <pre name="code" class="html">scala> add(2) res9: Int => Int = <function1>scala> add(2)(3)
res10: Int = 5
从这个例子中可以看到,在使用add(2)时,返回的是一个函数,其具体应为(y: Int) => 2 + y,而在使用add(2)(3)时,这个返回的函数又接受了3作为参数的调用,返回结果5。如果使用res9(3)调用,也会得到同样的结果5。
另外,Scala的函数柯里化还可以做如下的简写:
scala> def add(x: Int)(y: Int) = x + y关于函数柯里化的更详细介绍,请查看这篇文章:http://blog.csdn.net/qiruiduni/article/details/46895121
d、偏函数和偏应用函数
详见http://blog.csdn.net/qiruiduni/article/details/46914397
e、闭包
相关文章推荐
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例
- Lua实现split函数
- Lua常用时间函数使用实例
- Lua函数与字符串处理简明总结
- Lua学习笔记之表和函数
- Lua中实现sleep函数功能的4种方法
- Lua函数用法研究
- Lua基础教程之赋值语句、表达式、流程控制、函数学习笔记
- PowerShell函数简明教程
- 探索PowerShell(十一)函数介绍