例如, Exception.allCatch
被定义为
def allCatch[T]: Catch[T]
为什么不只是
val allCatch: Catch[Nothing]
当
Catch
它的论点是协变的吗?
或者,为什么
PartialFunction
对象定义
def empty[A, B]: PartialFunction[A, B]
而不仅仅是
val empty: PartialFunction[Any,Nothing]
?
更新:到目前为止,答案似乎没有捕获重点。因此,请在您的答案中包含一个真正针对该问题的具体示例。例如:显示一段与
def empty[A, B]: PartialFunction[A, B]
一起使用的代码但对
val empty: PartialFunction[Any,Nothing]
不起作用(或不太方便) .
请您参考如下方法:
这节省了稍后进行转换的需要,并允许将 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