foo [T](T,T)的拓宽/推理:T

假设有三个功能:

def foo[T](a:T, b:T): T = a 
def test1 = foo(1, "2") 
def test2 = foo(List(), ListBuffer()) 

虽然test1是Any类型,但test2不能编译。 这是为什么? List()和ListBuffer()都是Any类型,那么test2为什么不是Any类型呢? 同样,他们都是SeqFactory类型的,所以Scala可以以某种方式推断出那种类型的test2是SeqFactory?

foo(ListBuffer(), "")foo(List(), "")按预期工作


对我来说看起来像一个bug。 Scala首先推断Seq[Nothing]{def seq: Seq[Nothing]{def companion: scala.collection.generic.GenericCompanion[Seq[Any]]}; def companion: scala.collection.generic.GenericCompanion[Seq[Any]]} Seq[Nothing]{def seq: Seq[Nothing]{def companion: scala.collection.generic.GenericCompanion[Seq[Any]]}; def companion: scala.collection.generic.GenericCompanion[Seq[Any]]} ,然后决定ListBuffer[Nothing]并不适合该类型。

链接地址: http://www.djcxy.com/p/6483.html

上一篇: widening/inference of foo[T](T,T): T

下一篇: Node.js chat