gpt4 book ai didi

scala - 使用 Scala 的 ObservableMap

转载 作者:行者123 更新时间:2023-12-01 11:56:30 25 4
gpt4 key购买 nike

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

我抓取了下面的片段 from scala-user并将其复制到 REPL。

电子邮件提到已标记为已修复的工单 2704,但此代码段不起作用。

那么是语法改变了还是 subscribe 被错误地调用了?

这是在 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]:

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 以覆盖 Pub 类型:

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 - 使用 Scala 的 ObservableMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6631924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com