【发布时间】:2011-09-14 05:50:32
【问题描述】:
在 2.8.1/2.9.0.1 REPL 中尝试如下,第一个报错。
val l = List(Vector(1,2), List(3,4,5))
error: type mismatch;
found : scala.collection.immutable.Vector[Int]
required: scala.collection.immutable.Seq[Int]{def companion: scala.collection.generic.GenericCompanion[scala.collection.immutable.Seq[Any]]; protected def thisCollection: Seq[Int]{def companion: scala.collection.generic.GenericCompanion[Seq[Any]]}; def dropRight(n: Int): scala.collection.immutable.Seq[Int]{def companion: scala.collection.generic.GenericCompanion[scala.collection.immutable.Seq[Any]]}; def takeRight(n: Int): scala.collection.immutable.Seq[Int]{def companion: scala.collection.generic.GenericCompanion[scala.collection.immutable.Seq[Any]]}; def slice(start: Int,end: Int): scala.collection.immutable.Seq[Int]{def companion: scala.collection.generic.GenericCompanion[scala.collection.immutable....
val l = List(Vector(1,2), List(3,4,5))
^
:5: error: type mismatch;
found : List[Int]
required: scala.collection.immutable.Seq[Int]{def companion: scala.collection.generic.GenericCompanion[scala.collection.immutable.Seq[Any]]; protected def thisCollection: Seq[Int]{def companion: scala.collection.generic.GenericCompanion[Seq[Any]]}; def dropRight(n: Int): scala.collection.immutable.Seq[Int]{def companion: scala.collection.generic.GenericCompanion[scala.collection.immutable.Seq[Any]]}; def takeRight(n: Int): scala.collection.immutable.Seq[Int]{def companion: scala.collection.generic.GenericCompanion[scala.collection.immutable.Seq[Any]]}; def slice(start: Int,end: Int): scala.collection.immutable.Seq[Int]{def companion: scala.collection.generic.GenericCompanion[scala.collection.immutable.Seq[Any]]}; def take(n: Int):...
val l = List(Vector(1,2), List(3,4,5))
^
虽然这会成功:
val l = List[Seq[Int]](Vector(1,2), List(3,4,5))
//evaluates fine to List[Seq[Int]] = List(Vector(1, 2), List(3, 4, 5))
scala 在第一种情况下试图推断的类型是什么?它是具有结构类型的 Seq 吗?为什么不能统一 Vector 和 List?这是一些缺少的功能,还是这种方式(需要显式类型 def)以防止射击自己的脚?
【问题讨论】:
-
适用于 2.9.1 scala> val l = List(Vector(1,2), List(3,4,5)) l: List[scala.collection.immutable.Seq[Int] ] = List(向量(1, 2), List(3, 4, 5))
标签: scala type-inference seq