【问题标题】:What concrete datatype is created when I use the Seq[T] constructor?当我使用 Seq[T] 构造函数时会创建什么具体的数据类型?
【发布时间】:2017-10-10 17:33:00
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: scala collections traits seq


    【解决方案1】:

    为了完整性:答案也可以在Seq的(object,而不是traitScaladocs中找到:

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

    【讨论】:

      【解决方案2】:

      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 实现相比,使用 List 有明显的优缺点(例如,列表更新速度更快,Vector 索引速度更快)。我通常会在重要的时候使用更具体的类型来使这一点变得明显,否则Seq 会更简单。
      猜你喜欢
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2018-08-22
      • 1970-01-01
      • 2019-10-02
      • 2013-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多