使用Scala的ObservableMap [英] Using Scala's ObservableMap

查看:93
本文介绍了使用Scala的ObservableMap的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用scala.collection.mutable.ObservableMap.

I'm trying to use scala.collection.mutable.ObservableMap.

我从scala用户中抓到了 下面的代码段,然后将其复制到REPL.

I grabbed the snippet below from scala-user and copied it to the REPL.

电子邮件中提到票证2704,该票证已标记为已修复",但此代码段无效.

The email mentions ticket 2704 which has been marked as fixed but this snippet does not work.

那么语法是否已更改或预订被错误地调用?

So has the syntax changed or is subscribe being called incorrectly?

这是在2.9.0.final上

This is on 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 = MySub@49918c8f

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

推荐答案

此处的问题是MyMap没有优化Pub类型,因此MyMap需要Subscriber[Message[(Int, Int)] with Undoable, ObservableMap[Int, Int]],而您的订阅者类型为Subscriber[Message[(Int, Int)] with Undoable, MyMap].有两个选项-要么更改您的订户,以使Pub类型为ObservableMap[Int, Int]:

The problem here is that MyMap isn't refining the Pub type, so MyMap wants a Subscriber[Message[(Int, Int)] with Undoable, ObservableMap[Int, Int]] and your subscriber type is Subscriber[Message[(Int, Int)] with Undoable, MyMap]. There are two options -- either change your subscriber so that the Pub type is ObservableMap[Int, Int]:

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)

或更改MyMap以覆盖发布类型:

or, change MyMap to override the Pub type:

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

这篇关于使用Scala的ObservableMap的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆