2

マップを含むクラスがあります。私は、特定の形式でグループ化されたマップを本質的に含む怠惰なvalを持っています。メソッドを介して複数回使用し、ある時点でこのマップをクリアしたいと思います。どうすればこのようなことをすることができますか。

class A(input: Map[key,value]) {
   private lazy val mapgrouped = input.groupBy(_._1.a)
   def useMap()
   {
       //use the mapgrouped Map multiple times
   }

   def clearMap()
   {
      // clear the mapgrouped field here
   }
}
4

2 に答える 2

3

特定のパフォーマンス要件がない限り、val-of-mutable ではなく var-of-immutable を選択することをお勧めします。前者は安全なパブリケーションを可能にします。リーダーは必ずしも最新バージョンのデータを取得するとは限りませんが、他のスレッドが改ざんできない内部的に一貫したスナップショットを取得することが保証されます。

あなたの場合、私はおそらく次のようなことをします:

private var mMapGrouped: Option[Map[A,B]] = None

def useMap() {
  val map = mMapGrouped.getOrElse {
    val newMap = rebuildTheMap(...)
    mMapGrouped = Some(newMap)
    newMap
  }

  doStuffWith(map)
}

def clearMap() {
  mMapGrouped = None
}
于 2013-01-15T00:26:45.577 に答える
0

の評価戦略を制御することはできず、lazy val厳密に RHS の 1 回限りの評価です。

グループ化されたマップはプライベートであるため、その Map インスタンス自体が漏洩することを許可していないと思います。その場合、Map必要なポリシーに基づいて変更可能にし、その内容をリセット/再生成できます。

于 2013-01-15T00:00:18.040 に答える