+ Scala中列表上的运算符

时间:2015-07-20 17:17:09

标签: list scala collections

我对Scala编程很陌生,现在正试图了解scala.collection.immutable.List的运算符+的确切行为。这是我写的:

val _1 = List(1, 2)
println((_1 + "2") foreach print

我无法写下以下内容

_1 + 2 //error: expected String

很清楚,因为我们正在尝试执行+类中定义的String运算符。

但不清楚的是,为什么他们并没有覆盖operator +的{​​{1}},而是将List定义为连接?

是否有一些技术原因?

这是什么意思?

1 个答案:

答案 0 :(得分:2)

  

为什么他们不只是覆盖了List的operator +,而是定义了operator ++来连接?

不采用单个元素而是采用集合的方法通常表示通过“复数”运算符,例如<p>......</p> [Hello World]({% post_url 2015-01-19-soccer %}) <p>........ </p> 用于连接集合++以预先添加列表。例如,:::方法用于将单个元素添加到非线性集合+Set

Map

以“复数”:

Set(1, 2, 3) + 4
Map(1 -> "foo", 2 -> "bar") + (3 -> "baz")

线性集合通过添加冒号来指示“方向”,因此Set(1, 2, 3) ++ Set(4, 5, 6) 用于追加,:+用于前置:

+:
  

是否有一些技术原因?

没有。可以出于任何原因在任何类型上定义1 +: Seq(2, 3) :+ 4 方法。不建议这样做。

+

这是Scala中常见的益智游戏。如果右手操作数是List(1, 2) + "3" // "List(1, 2)3" ,则使用String方法将左操作数隐式转换为另一个String,将两个字符串粘合在一起。