为什么scala将Seq转换为List?

时间:2014-09-28 13:56:56

标签: scala

> val a:Seq[Integer] = Seq(3,4)
a: Seq[Integer] = List(3, 4)

如果Seq只是一个特征,为什么编译器/ REPL接受它,它的行为与许多其他特征甚至抽象类的行为相同?

2 个答案:

答案 0 :(得分:8)

它没有转换任何东西。

Seq是一个特质,你无法真正实例化它,只能将它混合到某个类中。

由于apply伴随对象的Seq方法必须返回一些具体的类实例(混合在Seq trait中),它会返回一个似乎是List的{​​{1}}合理的默认值。

这可能有用的一种情况是,当您需要一些Seq实例时,但不关心实施,也没有时间查看类型层次结构以找到合适的实现Seq的类。 Seq(3,4)保证会为您提供符合Seq合同的内容。

答案 1 :(得分:6)

Seq的默认实现是scaladoc中提到的List:

Seq Object

其中说

  

此对象提供一组用于创建Seq值的操作。 Seq的当前默认实现是List。

调用Seq(3,4)时,您实际调用了Seq.apply(3,4),其中构建了一个由两个元素组成的序列作为List