在 Scala 中,PartialFunction[A, B]
类派生自类型Function[A, B]
(参见 Scala 参考,12.3.3)。但是,这对我来说似乎违反直觉,因为 a Function
(需要为 all 定义A
)比 a 具有更严格的要求PartialFunction
,在某些地方可能未定义。
我遇到的问题是,当我有一个偏函数时,我不能使用 aFunction
来扩展偏函数。例如。我不能做:
(pf orElse (_)=>"default")(x)
(希望语法至少远程正确)
为什么这个子类型是反向进行的?有没有我忽略的原因,比如Function
类型是内置的?
顺便说一句,如果Function1 :> Function0
我不需要上面示例中的虚拟参数,那也很好:-)
编辑以澄清子类型问题
通过查看两个示例可以强调两种方法之间的区别。他们哪一个是对的?
一:
val zeroOne : PartialFunction[Float, Float] = { case 0 => 1 }
val sinc = zeroOne orElse ((x) => sin(x)/x) // should this be a breach of promise?
二:
def foo(f : (Int)=>Int) {
print(f(1))
}
val bar = new PartialFunction[Int, Int] {
def apply(x : Int) = x/2
def isDefinedAt(x : Int) = x%2 == 0
}
foo(bar) // should this be a breach of promise?