1

私は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)
4

1 に答える 1

0

simpleopタイプがパラメータのメソッドを呼び出すことはできないため、:と。Responseの両方を持つことはできません。case r:Response => map("").op foreach ((o) => o(r))req.op += simpleop _

于 2012-12-11T21:42:20.320 に答える