第十八课:Scala偏函数,异常,Lazy值编码实战

偏函数的英文是Partial Function(部分函数),从这名字来看很容易理解为函数没有定义完,有哪些情况是函数没有定义完?

函数没有定义完太常见了,因为我们有可能是不知道全部的业务逻辑的,所以偏函数是非常常见的

 

之前说过,Scala的函数背后都是类,例如会有:

trait Function1

而且没有实现函数式编程的时候,需要实现接口,然后调对应的方法,但是现在不用了,其实是Scala帮我们写了!!!

其实可以发现Scala的Function和Spark的Function是不一样的

 

至于偏函数背后也是一个类,trait PartialFunction[-A, +B]

其实可以这样理解:

{

        case Hello(name,content,sender) =>

          println("Hello,"+name+":" + content)

          counter += 1

           Thread.sleep(1000)

          sender ! HelloBack(name,content+counter,this)

}

在这个函数中会处理不同的消息,但是没有定义完所有的类型,

它会通过isDefinedAt会判断你的值是否在域中,

如果isDefinedAt返回true的,就会调用apply(a)方法

其实是就是调用apply方法的时候把值传进来,然后进行case匹配
 

Partial Function 的例子:

package com.dt.spark.scala.basics

 

object HelloPartialFunction {

 

  def main(args:Array[String]){

    val sample = 1 to 10

    val isEven:PartialFunction[Int,String] ={

      case x if x % 2==0 => x+" is even"

    }

   

   

//    isEven(3) // Match Error

    isEven(2)

   

    val evenNumbers = sample.collect(isEven)

    evenNumbers.foreach(println)

   

    val isOld:PartialFunction[Int,String] ={

      case x if x % 2==1 => x+" is old"

    }

   

    val numbers=sample.map(isEven orElse isOld)

    numbers.foreach(println)

     

  }

 

}

 

归纳总结:1.偏函数的定义以及为什么它会出现?

2.函数的背后,偏函数的背后

3.例子

 

转载于:https://my.oschina.net/u/1449867/blog/730350

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值