【发布时间】:2009-05-30 21:51:01
【问题描述】:
在 Scala 中,PartialFunction[A, B] 类派生自 Function[A, B] 类型(参见 Scala 参考,12.3.3)。但是,这对我来说似乎违反直觉,因为Function(需要为所有A 定义)比PartialFunction 具有更严格的要求,PartialFunction 在某些地方可能未定义。
我遇到的问题是,当我有一个偏函数时,我不能使用Function 来扩展偏函数。例如。我做不到:
(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?
【问题讨论】:
-
这个问题是否已经回答或仍然开放?
-
我不知道。我正在考虑关闭它,因为我认为它会在一些邮件列表或其他东西中更快乐......
标签: scala type-systems subtype