• Scala中的偏函数与部分应用函数


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

    首先偏函数是个数学概念, 偏函数不是"函数"的一种, 而是一个跟函数平行的概念.

      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
    第二次结对编程作业
    第2组 团队展示
    第02组 Alpha冲刺(4/6)
    第02组 Alpha冲刺(3/6)
    第02组 Alpha冲刺(2/6)
    第02组 Alpha冲刺(1/6)
    第02组 团队GIT现场编程实战
    团队项目-需求分析报告
  • 原文地址:https://www.cnblogs.com/moonandstar08/p/5785578.html
Copyright © 2020-2023  润新知