在函数的集合论视图中,如果函数可以将域中的每个值映射到范围内的值,我们就说这个函数是total function。在某些情况下,函数无法将域中的某些元素映射到范围;此类函数称为partial functions。
以 Scala 文档中的部分函数为例:
val isEven: PartialFunction[Int, String] = {
case x if x % 2 == 0 => x+" is even"
}
这里定义了一个偏函数,因为它被定义为仅将偶数整数映射到字符串。所以偏函数的输入是整数,输出是字符串。
val isOdd: PartialFunction[Int, String] = {
case x if x % 2 == 1 => x+" is odd"
}
isOdd 是另一个与isEven 类似定义的偏函数,但用于奇数。同样,偏函数的输入是整数,输出是字符串。
如果您有一个数字列表,例如:
List(1,2,3,4,5)
并在此列表上应用isEven 部分函数,您将得到输出
List(2 is even, 4 is even)
请注意,并非原始列表中的所有元素都已被偏函数映射。但是,在某些情况下,您可能希望在部分函数无法将元素从域映射到范围的情况下应用另一个函数。在这种情况下,我们使用orElse:
val numbers = sample map (isEven orElse isOdd)
现在你会得到输出:
List(1 is odd, 2 is even, 3 is odd, 4 is even, 5 is odd)