为什么我的模式匹配在Scala中失败?

时间:2011-08-23 11:35:23

标签: scala

我的方法如下

  protected override def onEvent(event: Class[_]) = event match {
    case event: mydomain.Quote => println("qu")
    case _ => println("eventsample" + event)

  }

控制台打印出以下内容

eventsampleclass mydomain.Quote

我认为这会在模式匹配中被捕获

1 个答案:

答案 0 :(得分:10)

没有匹配,因为您的模式正在寻找Quote的实例,而您正在传递classOf[Quote],这是Class[Quote]的实例,而不是Quote

要匹配,您需要拨打onEvent(new myDomain.Quote(...)),而不是onEvent(classOf[myDomain.Quote])。 (有点不幸的是编译器接受了你的第一个模式,因为它没有机会匹配Class类型的事件。)

如果您想识别班级[引用],可以使用模式case c if c == ClassOf[Quote],但我认为没有任何理由不使用简单的if / else < / p>