scala基础24-偏函数初探
来源:互联网 发布:九分裤牌子知乎 编辑:程序博客网 时间:2024/05/16 11:03
object Test { def main(args: Array[String]): Unit = { def sum(a: Int, b: Int, c: Int) = a + b + c println(sum(1, 2, 3)) val fp_a = sum _ println(fp_a(1, 2, 3)) println(fp_a.apply(1, 2, 3)) /* * 目前暂时的理解:偏函数是因为某个函数的某个参数经常是固定值 * 那么自定义个偏函数,方便使用 */ val fp_b = sum(1, _: Int, 3) println(fp_b(2)) println(fp_b(10)) }}
附:
scala中有PartialFunction的概念, 同时还要一个概念叫Partial Applied Function. 前者译作偏函数, 后者译作"偏应用函数"或"部分应用函数", 一字之差, 差距很大.
首先偏函数是个数学概念, 偏函数不是"函数"的一种, 而是一个跟函数平行的概念. 它是指定义域X中可能存在某些值在值域Y中没有对应的值.
scala可以通过模式匹配来定义偏函数, 下面这两种方式定义的函数, 都可以认为是偏函数, 因为他们都只对其定义域Int的部分值做了处理. 那么像p1哪有定义成PartialFunction的额外好处是, 你可以在调用前使用一个isDefinedAt方法, 来校验参数是否会得到处理. 或者在调用时使用一个orElse方法, 该方法接受另一个偏函数,用来定义当参数未被偏函数捕获时该怎么做. 也就是能够进行显示的声明. 在实际代码中最好使用PartialFunction关键字来声明你确实是要定义一个偏函数, 而不是漏掉了什么.
def p1:PartialFunction[Int, Int] = { case x if x > 1 => 1 } def p2 = (x:Int) => x match { case x if x > 1 => 1 }
而部分应用函数, 是指一个函数有N个参数, 而我们为其提供少于N个参数, 那就得到了一个部分应用函数.
比如我先定义一个函数
def sum(a:Int,b:Int,c:Int) = a + b + c;
那么就可以从这个函数衍生出一个偏函数是这样的:
def p_sum = sum(1, _:Int, _:Int)
于是就可以这样调用p_sum(2,3), 相当于调用sum(1,2,3) 得到的结果是6. 这里的两个_分别对应函数sum对应位置的参数. 所以你也可以定义成
def p_sum = sum (_:Int, 1, _:Int)
这东西有啥用呢? 一个是当你在代码中需要多次调用一个函数, 而其中的某个参数又总是一样的时候, 使用这个可以使你少敲一些代码.
0 0
- scala基础24-偏函数初探
- 【Scala】Scala函数式编程初探
- Scala基础—偏函数的示例
- scala基础29-模式匹配初探
- Scala基础之函数
- scala初探
- scala基础5-函数进阶
- scala基础23-内部函数
- Scala 之 函数----基础篇
- scala中的基础函数补充
- Spark基础-Scala偏函数和lazy和异常
- scala基础16-trait初探/对象中混入trait
- scala 偏函数
- Scala偏函数
- Scala之偏函数
- Scala中偏函数
- scala中的偏函数
- Scala的偏函数
- python脚本爬取今日百度热点新闻
- rest风格api实践初探
- Java 基础----内部类
- C的函数
- 用堆实现优先队列
- scala基础24-偏函数初探
- Android:学习AIDL,这一篇文章就够了(上)
- 容联?融云?环信?开发者怎么选
- Python爬虫学习系列教程-----------爬虫系列 你值的收藏
- B. Lovely Palindromes
- POJ 1006 Biorhythms
- 贝塞尔曲线开发的艺术
- maven启动
- day07_configparser