2011-07-09 7 views
3

scala.collection.mutable.ObservableMapを使用しようとしています。ScalaのObservableMapの使用

from scala-user以下のスニペットを取得してREPLにコピーしました。

電子メールには修正済みとマークされたチケット2704が記載されていますが、このスニペットは機能しません。

構文が変更されているか、サブスクライブが誤って呼び出されていますか?

これは、ここでの問題は、マイマップは、パブの種類を洗練されていないということですので、マイマップはSubscriber[Message[(Int, Int)] with Undoable, ObservableMap[Int, Int]]を望んでいるし、あなたの加入者タイプがSubscriber[Message[(Int, Int)] with Undoable, MyMap]ある2.9.0.final

scala> import scala.collection.mutable._ 

import scala.collection.mutable._ 

scala> import scala.collection.script._ 
import scala.collection.script._ 

scala> class MyMap extends HashMap[Int,Int] with ObservableMap[Int,Int,MyMap] 
<console>:13: error: wrong number of type arguments for scala.collection.mutable.ObservableMap, should be 2 
     class MyMap extends HashMap[Int,Int] with ObservableMap[Int,Int,MyMap] 
               ^

scala> class MyMap extends HashMap[Int,Int] with ObservableMap[Int,Int] 
defined class MyMap 

scala> val map = new MyMap 
map: MyMap = Map() 

scala> class MySub extends Subscriber[Message[(Int,Int)],MyMap] { 
    | def notify(pub: MyMap, evt: Message[(Int,Int)]) { println(evt) } 
    | } 
defined class MySub 

scala> val sub = new MySub 
sub: MySub = [email protected] 

scala> map.subscribe(sub) 
<console>:18: error: type mismatch; 
found : MySub 
required: map.Sub 
     map.subscribe(sub) 

答えて

5

です。そこの2つのオプションがある - のいずれかPubタイプがObservableMap[Int, Int]あるように、あなたの加入者を変更します。

import scala.collection.mutable._ 
import scala.collection.script._ 

class MyMap extends HashMap[Int,Int] with ObservableMap[Int,Int] { 
    type Pub = MyMap 
} 
val map = new MyMap 

class MySub extends Subscriber[Message[(Int,Int)] with Undoable, MyMap] { 
    def notify(pub: MyMap, evt: Message[(Int,Int)] with Undoable) { println(evt) } 
} 
val sub = new MySub 

import scala.collection.mutable._ 
import scala.collection.script._ 

class MyMap extends HashMap[Int,Int] with ObservableMap[Int,Int] 
val map = new MyMap 

class MySub extends Subscriber[Message[(Int,Int)] with Undoable, ObservableMap[Int, Int]] { 
    def notify(pub: ObservableMap[Int, Int], evt: Message[(Int,Int)] with Undoable) { println(evt) } 
} 
val sub = new MySub 

map.subscribe(sub) 

や、変更のマイマップは、パブの種類を無効にします

関連する問題