http://www.cnblogs.com/nixil/archive/2012/05/16/2503722.html

scala中有PartialFunction的概念, 同时还要一个概念叫Partial Applied Function. 前者译作偏函数, 后者译作"偏应用函数"或"部分应用函数", 一字之差, 差距很大.

首先偏函数是个数学概念, 偏函数不是"函数"的一种, 而是一个跟函数平行的概念. 定义可参考wiki http://zh.wikipedia.org/wiki/%E5%87%BD%E6%95%B0 , 它是指定义域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) 

这东西有啥用呢? 一个是当你在代码中需要多次调用一个函数, 而其中的某个参数又总是一样的时候, 使用这个可以使你少敲一些代码. 另一个呢?

偏函数与部分应用函数相关推荐

  1. python偏函数和高阶函数_【Python入门】8.高阶函数之 匿名函数和偏函数

    目录 高阶函数 匿名函数 lambda 偏函数 高阶函数 匿名函数 lambda lambda,即希腊字母λ.顾名思义,匿名函数没有函数名,在运用时采取lambda x : ...的方式,如lambd ...

  2. 【Scala】Scala的偏函数和偏应用函数

    偏函数(Partial Function),是一个数学概念它不是"函数"的一种, 它跟函数是平行的概念. Scala中的Partia Function是一个Trait,其的类型为P ...

  3. Python基础-----列表生成式、偏函数、高阶函数、闭包、装饰器

    列表生成式 列表生成式(列表推导式):通俗理解使用for循环快速创建一个列表,最终要获取一个列表 下面这个我们经常使用比较麻烦的方法: my_list=[] for i in range(1,6):p ...

  4. Scala学习笔记(六) Scala的偏函数和偏应用函数

    1. 偏函数 偏函数(Partial Function),是一个数学概念它不是"函数"的一种, 它跟函数是平行的概念. Scala中的Partia Function是一个Trait ...

  5. python偏函数和高阶函数_Python高阶函数-偏函数

    Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function).要注意,这里的偏函数和数学意义上的偏函数不一样. 在介绍函数参数的时候,我们说过,通过 ...

  6. Scala 偏函数和偏应用函数

    偏函数 偏函数是指仅定义了输入参数的子集的函数,如下图: 这个图显示的一个偏函数:f : X -> Y,该函数仅定义了输入参数X的子集1和3,没有包含2. 在Scala中的偏函数是通过特质Par ...

  7. scala简明教程:偏函数、高阶函数、Future异步编程、隐式转换

    高阶函数和匿名函数的使用:

  8. 打造属于自己的underscore系列(五)- 偏函数和函数柯里化

    这一节的内容,主要针对javascript函数式编程的两个重要概念,偏函数(partial application) 和函数柯里化(curry)进行介绍.着重讲解underscore中对于偏函数应用的 ...

  9. scala中的部分应用函数和偏函数的区别

    2019独角兽企业重金招聘Python工程师标准>>> 经常把部分应用函数(Partial Applied Function)和偏函数(Partial Function) 搞混. 本 ...

最新文章

  1. 石墨文档Websocket百万长连接技术实践
  2. sql like 多个值_用于数据分析的8个SQL技术
  3. SAP Spartacus content page url的硬编码列表 - Page Label
  4. python面向对象的特征_03 Python 关键点讲解:面向对象的机制
  5. asp 检测更改后缀的图片_微信不能发送25M以上视频?一键修改后缀名,就能立马发送...
  6. 再谈互斥锁与条件变量!(终于搞清楚了啊!!!!!)
  7. 21天学通c语言总结(3)
  8. python股票回测_python量化入门(一)——利用特定指标筛选股票并回测
  9. “怀孕后,老公居然背着我做这些事”:有没有嫁对人,看这点就知道了
  10. Flask06_ORM多表
  11. python中re.sub函数
  12. javaIO模型-Socket实现一个简单的客服聊天功能的改造(二)
  13. 【RocketMQ】玩转各种类型的消息
  14. 微型计算机第六章课后答案,微型计算机原理及其接口技术第六章部分习题.doc...
  15. 实现弹簧柔性状态的2种方式 | Solidworks教程
  16. 5G,建设得怎么样了?
  17. 【飞郁2022新课程】23 - CE找偏移表达式
  18. 基于 YOLOv2 Tiny的车牌检测
  19. OmniGraffle 7.2 for Mac
  20. 自由液面的土石坝平面渗流分析

热门文章

  1. IPTV是什么 IPTV有什么功能
  2. vue+Element ui 实现照片墙
  3. [HarekazeCTF2019]Avatar Uploader 1
  4. Nim中文社区 官网现已上线!
  5. 解决海康威视高清网络球机云台不能上扬的问题
  6. 二叉树空指针个数的理解
  7. mysql批量修改表名前缀
  8. [计算模型]%90的银弹
  9. 手机控制汽车无钥匙进入一键启动方案设计
  10. [Python]profile优化实践(基于A*算法)