私はscalaで小さなメッセージングシステムを作ろうとしています。//PROBLEMでこのクラス/タイプ/ジェネリック/階層性問題を解決する方法がわかりません
ロジックは次のとおりです。リクエストには、到着時にレスポンスとともに呼び出す関数のリストがあります。応答が到着すると、getResultが呼び出され、パターンマッチングが使用されます。Responseのサブタイプによってオーバーロードされる可能性のあるRequestのリストから関数を呼び出すことができないようです。
object Worksheet {
class Request {
//var op = List[( _<:Response ) => Unit]()
var op = List[Response => Unit]() // FIXED
}
class Response {}
class MyResult extends Response {}
class AnotherMyResult extends Response {}
val map = Map[String, Request]()
def getResult(a:Any) {
a match {
...
case r:Response =>
//map.get("").get.op foreach ((o) => o(r)) //PROBLEM
map("").op foreach ((o) => o(r)) //NO PROBLEM
...
}
}
}
助けてください ;)
編集
def simpleop (r:MyResult) : Unit = { }
def req = new Request()
req.op += simpleop _ //PROBLEM STILL
map += ("" -> req)