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)