例如, 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 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!