[英]+ 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.