Scala 函数式编程_偏函数_Partial Functions
偏函数_Partial Functions
偏函数是只对函数定义域的一个子集进行定义的函数。 scala中用scala.PartialFunction[-T, +S] 类来表示。
比如,对给定的输入参数类型,偏函数只能接受该类型的某些特定的值。一个定义为(Int) => String 的偏函数可能不能接受所有Int值为输入。
如下定义一个偏函数,这个函数只会接收 1 和 2 ,这两个输入。其他输入会报错。
val one: PartialFunction[Int, String] = { case 1 => "one" case 2 => "two"}println(one.isDefinedAt(1))println(one.isDefinedAt(2))println(one(1))println(one(2))
运行并输出,
true
true
one
two
isDefinedAt表示 这个参数是否在函数的定义域中,否则抛出异常。
如下,
...........
...........
false
scala.MatchError: 3 (of class java.lang.Integer)
at scala.PartialFunction$$anon$1.apply(PartialFunction.scala:253)
at scala.PartialFunction$$anon$1.apply(PartialFunction.scala:251)
再来看一个例子,
val signal: PartialFunction[Int, Int] = { case x if x > 1 => 1 case x if x < -1 => -1}println(signal(1212))println(signal(-74567))println(signal(0))
运行并输出,
C:\WorkSpace6-scala\scala-train\src\com\usoft>scala PartialFunction.scala
1
-1
scala.MatchError: 0 (of class java.lang.Integer)
at scala.PartialFunction$$anon$1.apply(PartialFunction.scala:253)
使用 orElse 组合函数
使用 orElse 组合函数
val one: PartialFunction[Int, String] = { case 1 => "one"}val two: PartialFunction[Int, String] = { case 2 => "two"}val three: PartialFunction[Int, String] = { case 3 => "three"}val wildcard: PartialFunction[Int, String] = { case _ => "something else"}val partial = one orElse two orElse three orElse wildcardprintln(partial.isDefinedAt(4))println(partial(4))
运行并输出,
C:\WorkSpace6-scala\scala-train\src\com\usoft>scala PartialFunction.scala
true
something else
=============END=============