Scala 如果我传递了不可靠的类型,为什么期望类型别名输入的函数不进行类型检查?

Scala 如果我传递了不可靠的类型,为什么期望类型别名输入的函数不进行类型检查?,scala,scala-collections,Scala,Scala Collections,在下面的代码中,为什么编译器在传递给函数imSeq时无法推断x1是不可变的 def imSeq(e:scala.collection.immutable.Seq[Int])=e.foreach(println) def mSeq(e:Seq[Int])=e.foreach(println) scala>valx1=Seq(1,2,3) x1:Seq[Int]=列表(1,2,3) scala>x1.isInstanceOf[scala.collection.immutable.List[Int]]

在下面的代码中,为什么编译器在传递给函数imSeq时无法推断x1是不可变的

def imSeq(e:scala.collection.immutable.Seq[Int])=e.foreach(println)
def mSeq(e:Seq[Int])=e.foreach(println)
scala>valx1=Seq(1,2,3)
x1:Seq[Int]=列表(1,2,3)
scala>x1.isInstanceOf[scala.collection.immutable.List[Int]]
res11:Boolean=true
scala>x1.isInstanceOf[scala.collection.immutable.Seq[Int]]
res12:Boolean=true
scala>x1.isInstanceOf[scala.collection.mutable.Seq[Int]]
res13:布尔值=假
scala>imSeq(x1)
:10:错误:类型不匹配;
找到:Seq[Int]
必需:scala.collection.immutable.Seq[Int]
imSeq(x1)
^

这是因为您明确要求函数中包含的实例,但不只是
不可变.Seq的别名,它实际上是
不可变.Seq的基本特征。换句话说

概括接受的类型:

def imSeq(e: Seq[Int]) = e.foreach(println)

我不明白为什么我必须在这里明确imSeq(immutable.Seq(1,2,3)),评论应该是问题的一部分。