scala偏函数
- 普通偏函数
- 用case定义偏函数
- 组合多个偏函数
- 连接偏函数
代码
object Partion{
//普通函数
val div1=(x:Int)=>100/x
//偏函数
val div2=new PartialFunction[Int,Int]{
//先进行第一个函数的调用
def isDefinedAt(x:Int):Boolean=x!=0
def apply(x:Int):Int=100/x
}
//用case定义偏函数
val div3:PartialFunction[Int,Int]={
case d:Int if(d!=0)=>100/d
}
val res:PartialFunction[Int,String]={
case 1=>"one"
case 2=>"two"
case 3=>"three"
case _=>"other"
}
//组合多个偏函数
val r1:PartialFunction[Int,String]={case 1=>"one"}
val r2:PartialFunction[Int,String]={case 2=>"two"}
val r3:PartialFunction[Int,String]={case _=>"other"}
//res2传入一个int类型参数进行匹配
val res2=r1 orElse r2 orElse r3
//连接操作,连接r4和r5
val r4:PartialFunction[Int,String]={case cs if(cs==1)=>"one"}
val r5:PartialFunction[String,String]={case cs if(cs eq "one")=>"the num is 1"}
//传int类型然后得到r4返回的string类型,最后判断是否符合r5的字符串
val res3:(Int=>String)=r4 andThen(r5)
def main(args: Array[String]): Unit = {
println(div2.isDefinedAt(0))
println(div2.isDefinedAt(2))
//println(div2(0))//抛异常
println(div2(2))
println(div3(101))
println(res.isDefinedAt(1))
println(res(3))
println(res(4))
println(res2.isDefinedAt(3))
println(res2(1))
println(res3(1))
}
}
运行结果
false
true
50
0
true
three
other
true
one
the num is 1
Process finished with exit code 0