我对Scala编程很陌生,现在正试图了解scala.collection.immutable.List的运算符+
的确切行为。这是我写的:
val _1 = List(1, 2)
println((_1 + "2") foreach print
我无法写下以下内容
_1 + 2 //error: expected String
很清楚,因为我们正在尝试执行+
类中定义的String
运算符。
但不清楚的是,为什么他们并没有覆盖operator +
的{{1}},而是将List
定义为连接?
是否有一些技术原因?
这是什么意思?
答案 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
,将两个字符串粘合在一起。