相关疑难解决方法(0)

为什么PartialFunction <:Scala中的函数?

在Scala中,PartialFunction[A, B]类派生自类型Function[A, B](请参阅Scala参考,12.3.3).然而,这对我来说似乎违反直觉,因为a Function(需要为所有人定义A)具有比a更严格的要求PartialFunction,这在某些地方可能是不确定的.

我遇到的问题是,当我有部分功能时,我不能使用a Function来扩展部分功能.例如.我不能做:

(pf orElse (_)=>"default")(x)
Run Code Online (Sandbox Code Playgroud)

(希望语法至少是远程正确的)

为什么这个子类型反向完成?是否有任何我忽略的原因,比如这些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?
Run Code Online (Sandbox Code Playgroud)

二:

def foo(f : (Int)=>Int) {
  print(f(1))
}
val bar = new PartialFunction[Int, Int] {
  def apply(x : Int) = x/2 …
Run Code Online (Sandbox Code Playgroud)

type-systems scala subtype

44
推荐指数
2
解决办法
6808
查看次数

标签 统计

scala ×1

subtype ×1

type-systems ×1