当我使用 Seq[T] 构造函数时,会创建什么具体数据类型?

What concrete datatype is created when I use the Seq[T] constructor?

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

val numbers: Seq[Int] = Seq(1, 2, 3)
val names: Seq[String] = Seq("Alice", "Bob", "Charles")
  1. 由于 Seq 是一个特征而不是具体的实现,numbersnames 的基础是什么数据类型?
  2. 我自己解决这个问题的最佳方法是什么?
  3. 直接创建 trait 对象是惯用的吗?

谢谢!

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.

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

This object provides a set of operations to create Seq values. The current default implementation of a Seq is a List.