当我使用 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")
- 由于
Seq
是一个特征而不是具体的实现,numbers
和 names
的基础是什么数据类型?
- 我自己解决这个问题的最佳方法是什么?
- 直接创建 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)
至于哪个更好(创建 List
或 Seq
),我认为这与偏好有关。这两个选项都可用,据我所知,编译器在选择其中一个时不会抱怨。我个人总是使用 Seq
.
为了完整性:答案也可以在 Seq
中找到(对象,而不是 特征) Scaladocs:
This object provides a set of operations to create Seq values. The current default implementation of a Seq is a List.
Scala 允许我使用以下语法直接实例化实现 Seq
特征的对象:
val numbers: Seq[Int] = Seq(1, 2, 3)
val names: Seq[String] = Seq("Alice", "Bob", "Charles")
- 由于
Seq
是一个特征而不是具体的实现,numbers
和names
的基础是什么数据类型? - 我自己解决这个问题的最佳方法是什么?
- 直接创建 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)
至于哪个更好(创建 List
或 Seq
),我认为这与偏好有关。这两个选项都可用,据我所知,编译器在选择其中一个时不会抱怨。我个人总是使用 Seq
.
为了完整性:答案也可以在 Seq
中找到(对象,而不是 特征) Scaladocs:
This object provides a set of operations to create Seq values. The current default implementation of a Seq is a List.