部分应用函数
部分应用函数也称部分函数。当在调用一个函数时,把这个函数应用到参数中。 如果您传递所有预期的参数,则表示您已完全应用它。
如果只传递几个参数并不是全部参数,那么将返回部分应用的函数。这样就可以方便地绑定一些参数,其余的参数可稍后填写补上。
示例
object test {
def main(args: Array[String]): Unit = {
def showMsg(title:String,content:String,num:Int):Unit={
println(title+":"+content+" "+num+"米")
}
showMsg("警告","当前水位",12)
val title="提醒"
def showWaterAlter=showMsg(title,_:String,_:Int)
showWaterAlter("现在水位",20)
}
}
结果展示:
偏函数
偏函数是只对函数定义域的一个子集进行定义的函数
PartialFunction[-A,+B]是一个特质
- A为函数定义域,B为偏函数返回值类型
- apply()
- isDefinedAt()
//自定义偏函数
val inc = new PartialFunction[Any, Int] {
def apply(any: Any) = any.asInstanceOf[Int]+1
def isDefinedAt(any: Any) =
if (any.isInstanceOf[Int]) true else false
}
List(1,2,3,"four").collect(inc)
case语句
val pf:PartialFunction[Any, Int]={case x:Int=>x+1} //返回一个偏函数
List(1,2,3,"four").collect(pf) //输出List(2,3,4)
示例
object test {
def main(args: Array[String]): Unit = {
def funPartional:PartialFunction[String,Int]={
case "hello"=>1
case "world"=>2
case _=>0
}
val num1=funPartional("hello")
val num2=funPartional("world")
val num3=funPartional("gree")
println(num1)
println(num2)
println(num3)
val words=List("hello","world","gree","kn09")
val ints:List[Int]=words.collect(funPartional)
words.collect(funPartional).foreach(print)
//等同于
words collect funPartional foreach print
def funTest:PartialFunction[String,Int]={
case "male"=>1
case "female"=>0
case "男"=>1
case "女"=>0
case "m"=>1
case "f"=>0
case _=>6
}
val sexs=List("male","female","female","女","男","male","f","m","f","男男")
sexs.collect(funTest).foreach(print)
}
}
结果展示: