List +;Scala中列表上的运算符

List +;Scala中列表上的运算符,list,scala,collections,List,Scala,Collections,我对Scala编程非常陌生,现在正试图了解该函数的操作符+的确切行为。以下是我写的: val _1 = List(1, 2) println((_1 + "2") foreach print 我不能写下面的内容 _1 + 2 //error: expected String 这很清楚,因为我们正在尝试执行字符串类中定义的+运算符 但不清楚的是,为什么它们不只是覆盖列表的运算符+,而是定义了用于连接的运算符+ 有什么技术上的原因吗 这是什么意思 为什么它们不只是覆盖列表的运

我对Scala编程非常陌生,现在正试图了解该函数的操作符
+
的确切行为。以下是我写的:

val _1 = List(1, 2)
println((_1 + "2") foreach print
我不能写下面的内容

_1 + 2 //error: expected String
这很清楚,因为我们正在尝试执行
字符串
类中定义的
+
运算符

但不清楚的是,为什么它们不只是覆盖
列表的
运算符+
,而是定义了用于连接的
运算符+

有什么技术上的原因吗

这是什么意思

为什么它们不只是覆盖列表的运算符+,而是定义了用于连接的运算符+

不接受单个元素而接受集合的方法通常通过“复数”运算符表示,例如,
++
连接集合,
连接列表。例如,使用
+
方法将单个元素添加到非线性集合
集合
映射

Set(1, 2, 3) + 4
Map(1 -> "foo", 2 -> "bar") + (3 -> "baz")
在“复数”中:

线性集合通过添加冒号来指示“方向”,因此
:+
表示追加,
+:
表示前置:

1 +: Seq(2, 3) :+ 4
有什么技术上的原因吗

不可以。可以出于任何原因在任何类型上定义
+
方法。只是不建议这样做



这是Scala中常见的难题。如果右操作数是
字符串
,则使用
toString
方法将左操作数隐式转换为另一个
字符串
,将两个字符串粘在一起。

我认为Scala作者将
+
附加到
字符串
上是一个设计缺陷。你说的是什么意思“运算符+用于列表"? scala.ollection.immutable.List不提供
+
运算符。你想要的是
:+
,而不是
+
+
@yanana,我知道。这正是我所困惑的。没有为列表提供覆盖版本的原因是什么?对于所有可转换为
字符串的内容,都有一个
+
。因此,首先将
列表
转换为
字符串
,然后有一个
+
操作符。IMHO,向类似
列表
的数据结构提供
+
操作符只是一个坏习惯,因为数学中的
+
操作是可交换的,但
列表
甚至
字符串
都不是。
1 +: Seq(2, 3) :+ 4
List(1, 2) + "3" // "List(1, 2)3"