Pet*_*lák 7 polymorphism scala nothing any
例如,Exception.allCatch定义为
def allCatch[T]: Catch[T]
Run Code Online (Sandbox Code Playgroud)
为什么不呢
val allCatch: Catch[Nothing]
Run Code Online (Sandbox Code Playgroud)
什么时候Catch它的论证是协变的?
或者,为什么PartialFunction对象定义
def empty[A, B]: PartialFunction[A, B]
Run Code Online (Sandbox Code Playgroud)
而不仅仅是
val empty: PartialFunction[Any,Nothing]
Run Code Online (Sandbox Code Playgroud)
?
更新:到目前为止似乎答案错过了重点.因此,请在答案中包含一个真正针对问题的具体示例.例如:显示一段可以使用def empty[A, B]: PartialFunction[A, B]但不起作用(或不太方便)的代码val empty: PartialFunction[Any,Nothing].
小智 2
这节省了稍后进行转换的需要,并允许将 args 类型视为 T 而不是 Any,这通常更方便。
这是一个例子:
scala> def func1[T](arg : T) : T = { arg }
func1: [T](arg : T)T
scala> def func2(arg : Any) : Any = { arg }
func2: (arg: Any)Any
scala> func1(4)
res4: Int = 4
scala> func2(4)
res7: Any = 4
Run Code Online (Sandbox Code Playgroud)