[英]+ Operator on lists in Scala
我对Scala编程非常陌生,现在尝试了解scala.collection.immutable.List的运算符+
的确切行为。 这是我写的:
val _1 = List(1, 2)
println((_1 + "2") foreach print
我不能写以下内容
_1 + 2 //error: expected String
很清楚,因为我们试图执行String
类中定义的+
运算符。
但是还不清楚为什么它们不只是覆盖List
的operator +
,而是定义了用于连接的operator ++
?
有什么技术原因吗?
这意味着什么?
为什么他们不只是为列表重写运算符+,而是为串联定义了运算符++?
不使用单个元素但使用集合的方法通常通过“多个”运算符指示该方法,例如, ++
表示集合的集合, :::
表示列表的前面。 例如, +
方法用于将单个元素添加到非线性集合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
有什么技术原因吗?
不可以。出于任何原因,都可以在任何类型上定义+
方法。 只是不建议。
List(1, 2) + "3" // "List(1, 2)3"
这是Scala中的常见难题。 如果右侧操作数是String
,则使用toString
方法将左侧操作数隐式转换为另一个String
,将两个字符串粘合在一起。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.