【问题标题】:Type inheritance misunderstanding in Request Response messaging design with ScalaScala请求响应消息设计中的类型继承误解
【发布时间】:2012-11-29 12:01:48
【问题描述】:

我正在尝试使用 scala 制作一个小型消息传递系统。 我不知道如何在线解决这个类/类型/泛型/层次结构问题 //PROBLEM

逻辑是:请求有一个函数列表,当响应到达时调用。当 Response 到达时,调用 getResult 并使用模式匹配。似乎我无法从 Request 列表中调用可以被任何子类型 Response 重载的函数?

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)

【问题讨论】:

    标签: scala design-patterns generics inheritance matching


    【解决方案1】:

    您不能使用Response 类型的参数调用方法simpleop,因此您不能同时拥有case r:Response =&gt; map("").op foreach ((o) =&gt; o(r))req.op += simpleop _

    【讨论】:

    • 我已经编辑了上面的问题,但类型问题仍然与 //PROBLEM STILL 一致。我无法添加接受子类型作为参数的函数...
    • @user1895919:我之前的回答是错误的。我已经更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多