Scala 偏函数和部分函数

1、偏函数

  • 偏函数是只对函数定义域的一个子集进行定义的函数

  • PartialFunction[-A,+B]是一个特质,A是其接受的函数类型,B是其返回的结果类型。

  • 偏函数最大的特点就是它只接受和处理其参数定义域的一个子集,而对于这个子集之外的参数则抛出运行时异常。

  • 这与Case语句的特性非常契合,因为我们在使用case语句是,常常是匹配一组具体的模式,最后用“_”来代表剩余的模式。如果一一组case语句没有涵盖所有的情况,那么这组case语句就可以被看做是一个偏函数。

  • 偏函数主要用于这样一种场景:对某些值现在还无法给出具体的操作(即需求还不明朗),也有可能存在几种处理方式(视乎具体的需求);我们可以先对需求明确的部分进行定义,比如上述除了0外的所有整数域,然后根据具体情况补充对其他域的定义。

//以下偏函数可用于数据清洗
object FunctionDemo {
  def main(args: Array[String]): Unit = {
      def funPatition:PartialFunction[String,Int]={
          case "male"=>1
          case "female"=>0
          case "man"=>1
          case "woman"=>0
          case "男"=>1
          case "女"=>0
          case _=> -1
    }
    val genders=List("男","女","male","man","female","woman","wu")
   genders.collect(funPatition).foreach(println)

2、部分函数

  • 部分应用函数(Partial Applied Function)指缺少部分参数的函数。
  • def add(a:Int,b:Int,c:Int)=a+b+c,当调用add的时候,如果不提供所有的参数,比如add_,add(3,
    _: Int, _:Int),add(__: Int, 3, 4),这样就生成了所谓的部分应用函数。
  • 当你在代码中需要多次调用一个函数, 而其中的某个参数又总是一样的时候, 可以使用部分函数。
//示例1
def add(a:Int,b:Int,c:Int)=a+b+c
def add1=add(10,_:Int,_:Int)
println(add1(2, 1))	  //输出13

//示例2
def showMsg(title:String,content:String,num:Int):Unit={
      println(title+":"+content+" "+num+"米")
}
  
    val title="警告"
    def showWaterAlter=showMsg(title,_:String,_:Int)
    showWaterAlter("当前水位",14)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值