集合 (Scala 2.8 - 2.12)

從 Scala 2.7 移轉

語言

將您現有的 Scala 應用程式移植到使用新的集合幾乎是自動的。只有幾個可能的問題需要處理。

一般而言,Scala 2.7 函式庫的舊功能已保留。某些功能已標示為不建議使用,表示它們將在某個未來版本中移除。當您編譯在 Scala 2.8 中使用這些功能的程式碼時,會收到不建議使用警告。在少數情況下,不建議使用不可行,因為相關操作保留在 2.8 中,但意義或效能特性已變更。在 2.8 中編譯時,這些情況會標示為移轉警告。若要取得完整的「不建議使用」和「移轉」警告以及如何變更程式碼的建議,請將 -deprecation-Xmigration 旗標傳遞給 scalac(請注意 -Xmigration 是延伸選項,因此以 X 開頭)。您也可以將相同的選項傳遞給 scala REPL,以在互動式工作階段中取得警告。範例

>scala -deprecation -Xmigration
Welcome to Scala version 2.8.0.final
Type in expressions to have them evaluated.
Type :help for more information.
scala> val xs = List((1, 2), (3, 4))
xs: List[(Int, Int)] = List((1,2), (3,4))
scala> List.unzip(xs)
<console>:7: warning: method unzip in object List is deprecated: use xs.unzip instead of List.unzip(xs)
       List.unzip(xs)
            ^
res0: (List[Int], List[Int]) = (List(1, 3),List(2, 4))
scala> xs.unzip
res1: (List[Int], List[Int]) = (List(1, 3),List(2, 4))
scala> val m = xs.toMap
m: scala.collection.immutable.Map[Int,Int] = Map((1,2), (3,4))
scala> m.keys
<console>:8: warning: method keys in trait MapLike has changed semantics:
As of 2.8, keys returns Iterable[A] rather than Iterator[A].
       m.keys
         ^
res2: Iterable[Int] = Set(1, 3)

舊函式庫中有兩個部分已被整體取代,且不建議使用警告不可行。

  1. 先前的 scala.collection.jcl 套件已不存在。此套件嘗試在 Scala 中模仿 Java 函式庫設計的層面,但這麼做破壞了許多對稱性。大多數想要 Java 函式庫的人會略過 jcl,直接使用 java.util。Scala 2.8 在 JavaConversions 物件中提供兩者函式庫之間的自動轉換機制,取代 jcl 套件。
  2. 投影已進行概括和清理,現在可用作檢視。看來投影很少使用,因此這項變更不應影響太多程式碼。

因此,如果您的程式碼使用 jcl 或投影,可能需要進行一些小幅改寫。

此頁面的貢獻者