【问题标题】:Why is appending to a List in Scala returning other List type?为什么附加到 Scala 中的 List 返回其他 List 类型?
【发布时间】:2015-06-03 23:50:03
【问题描述】:

由于搜索 :+ 没有产生任何结果(感谢 google!)我找不到任何问题的答案:

为什么:

a :+ b

导致

List[Any]

如果'a'和'b'都是类型

List[Int]

自己尝试一下,以下不会编译(Scala 2.11.6,Idea14)​​:

object AAA extends App {
  val a: List[Int] = List[Int]()
  val b: List[Int] = List[Int]()

  val x: List[Int] = a :+ b
}

提前谢谢

【问题讨论】:

    标签: list scala collections types


    【解决方案1】:

    :+ 将单个元素附加到 List。因此,您将List[Int] 附加到List[Int],结果类似于(如果ab 都设置为List(1, 2)):

    List(1, 2, List(1, 2))
    

    Scala 计算元素类型 (Int) 和附加的东西 (List[Int]) 之间最常见的类型,即 Any

    您可能想要连接两个列表:

    val x: List[Int] = a ++ b
    

    【讨论】:

    • 我真的很惊讶 scala 让我这样做。我希望禁止将 [Any] 附加到类型化集合。
    • @pmkrefeld 正如你所说,当x 预期为List[Int] 时,它不会让你编译。
    • 我的意思是我很惊讶 a: List[Int] :+ b: Any 是允许的,用例应该是什么?
    • 如果启用 scala 编译器标志 -Xlint,当您推断 any 类型时会收到警告。如果你还添加了-Xfatal-warnings,你会将该警告变成一个错误。
    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多