使用Seq [T]构造函数时创建了什么具体的数据类型?

时间:2017-05-11 15:42:54

标签: scala collections traits seq

Scala允许我使用以下语法直接实例化一个实现Seq特征的对象:

val numbers: Seq[Int] = Seq(1, 2, 3)
val names: Seq[String] = Seq("Alice", "Bob", "Charles")
  1. 由于Seq是特征而非具体实现,因此哪种数据类型是numbersnames的基础?
  2. 我能想到的最好的方法是什么?
  3. 直接创建特质对象是不是惯用?
  4. 谢谢!

2 个答案:

答案 0 :(得分:4)

为了完整性:答案也可以在Seq中找到(对象,而不是 trait Scaladocs

  

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

答案 1 :(得分:3)

List是默认实现。您可以在Scala REPL中轻松测试:

scala> val numbers: Seq[Int] = Seq(1, 2, 3)
numbers: Seq[Int] = List(1, 2, 3)

scala> val names: Seq[String] = Seq("Alice", "Bob", "Charles")
names: Seq[String] = List(Alice, Bob, Charles)

就什么更好(创建ListSeq)而言,我认为这是偏好。这两个选项都可用,据我所知,编译器在选择其中一个时不会抱怨。我个人总是使用Seq