謝辞トップJavaとScalaのコレクションの変換2.7からの移行目次

2.7からの移行

既存のScalaアプリケーションを新しいコレクションを使うようにする移植はほとんど自動でできるはずです。 気を付ける必要がある問題は少ししかありません。

一般的にScala 2.7のコレクションの古い機能はそのまま残されています。 いくつかの機能は非推奨、つまり将来のバージョンで削除されるようになっています。 Scala 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((12), (34))
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メソッドは非推奨です: List.unzip(xs)の代わりにxs.unzipを使ってください)
       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].
(参考訳: 警告: MapLikeトレイトのkeysメソッドの意味は変わりました: 2.8ではkeysはIterator[A]ではなくIterable[A]を返します)
       m.keys
         ^
res2: Iterable[Int] = Set(1, 3)

古いライブラリには大規模に置き変えられたため非推奨警告が適当でない部分が2つあります。

そのため、もしコードがjclか射影を使っていた場合、小規模な書き替えが必要となるでしょう。

続いては: 謝辞


謝辞トップJavaとScalaのコレクションの変換2.7からの移行目次