まだ途中のコード。
これは、真面目にやるならcaseクラスを外で定義せずにAtomicMapクラス内部で自己完結するようにしないと、ジェネリックに書けない(書けたとしても実行時エラーがひどいことになりそう)んじゃないかと思うので、あとで考える。
あと、Stopが邪魔ですね・・・。
import scala.actors.Actor import scala.actors.Actor._ case class Insert(key: String, value: Int) case class Get(key : String) case object Stop class AtomicMap extends Actor { private var collection: Map[String, Int] = Map() def act() = loop { receive { case Insert(key, value) => collection += key -> value case Get(key) => reply(collection.get(key)) case Stop => exit() } } } object Main extends Application { val m = new AtomicMap m.start m ! Insert("a", 3) m ! Insert("b", 1) m ! Insert("c", 4) m !? Get("b") match { case Some(x: Int) => println(x) case None => println("none") case _ => println("error") } m ! Stop }
1