构造LinearSeq

时间:2016-04-20 09:40:56

标签: scala scala-collections

在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)
          ^

请解释一下这种行为。

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置于默认范围内,他们对TraversableIterableSeqList执行了相同的操作方便,但他们没有为LinearSeq做到这一点,这可能是合理的,因为我在我的代码中没有明确地使用它,而我使用了大部分其他东西。