在Scala中,LinearSeq和IndexedSeq是Seq的子特征。 如果我构建一个IndexedSeq,比如
IndexedSeq(1)
我得到了默认的实现,即Vector
IndexedSeq[Int] = Vector(1)
但是如果我尝试构建一个LinearSeq,就像在
中一样LinearSeq(1)
我收到错误而不是默认实现List
<console>:8: error: not found: value LinearSeq
LinearSeq(1)
^
请解释一下这种行为。
答案 0 :(得分:4)
您需要先导入它......
import scala.collection.immutable.LinearSeq
或
import scala.collection.LinearSeq
REPL:
@ import scala.collection.immutable.LinearSeq
import scala.collection.immutable.LinearSeq
@ LinearSeq(1)
res3: LinearSeq[Int] = List(1)
要回答为什么您需要导入此IndexedSeq
除外,请参阅默认情况下导入的scala
包对象的来源:
type IndexedSeq[+A] = scala.collection.IndexedSeq[A]
val IndexedSeq = scala.collection.IndexedSeq
因此,语言设计人员将IndexedSeq
置于默认范围内,他们对Traversable
,Iterable
,Seq
,List
执行了相同的操作方便,但他们没有为LinearSeq
做到这一点,这可能是合理的,因为我在我的代码中没有明确地使用它,而我使用了大部分其他东西。