3

入力ソースからマップを作成するメソッドを実装していることに気付くことがよくあります。この場合、scala.collection.mutable.Map速度と効率が高いと仮定して、 を使用します。ただし、このコレクションが構築されると、それを変更可能にしたくなくなります。

可変マップから不変マップを返す Scala の推奨される方法は何ですか? 通常、私はmyMap.toMap明らかに機能しますが、においがします。または、新しいコレクションを作成する必要のない戻り値の型を設定できますが、scala.collection.Map読者を混乱させる可能性があるようです。

返信ありがとうございます。

4

3 に答える 3

5

なぜにおいがすると思うのかはわかりませんが、明確.toMapにしたい場合は、collection.immutable.Map() ++ myMap何が起こっているのかを明確に文書化する必要があります. ( を忘れないでください()。オプションではありません。)

戻り値の型を変更するだけでは、不変性の問題は完全には解決されません。変更メソッドは表示されなくなりますが、ユーザーは簡単にキャストバックできます。ただし、実際には何も変更されていないため、これが最高のパフォーマンスのアプローチです。

于 2012-04-12T16:38:58.610 に答える
0
import scala.collection._
import scala.collection.JavaConversions._

val myMap: mutable.Map[K,V] = ???
val unmodifiable: mutable.Map[K,V] =
  java.util.Collections.unmodifiableMap[K,V](myMap)
val newMap = unmodifiable.asInstanceOf[scala.collection.Map[K,V]]

にキャストできますが、変更newMapするmutable.Mapと がスローされUnsupportedOperationExceptionます。

私の場合、マップは十分に小さいため、toMap高速でメモリ使用量が少なくて済みます。

于 2015-08-22T05:44:13.520 に答える