繁体   English   中英

+ Scala列表上的运算符

[英]+ 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类中定义的+运算符。

但是还不清楚为什么它们不只是覆盖Listoperator + ,而是定义了用于连接的operator ++

有什么技术原因吗?

这意味着什么?

为什么他们不只是为列表重写运算符+,而是为串联定义了运算符++?

不使用单个元素但使用集合的方法通常通过“多个”运算符指示该方法,例如, ++表示集合的集合, :::表示列表的前面。 例如, +方法用于将单个元素添加到非线性集合SetMap

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM