List +;Scala中列表上的运算符
我对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 这很清楚,因为我们正在尝试执行字符串类中定义的+运算符 但不清楚的是,为什么它们不只是覆盖列表的运算符+,而是定义了用于连接的运算符+ 有什么技术上的原因吗 这是什么意思 为什么它们不只是覆盖列表的运
+
的确切行为。以下是我写的:
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"