簡體   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