Scala错误:未绑定的占位符参数和模式匹配条件

时间:2015-08-01 06:59:21

标签: scala pattern-matching apache-samza

我试图将模式匹配和条件结合起来,但这段代码(这是一个Samza任务):

override def process(incomingMessageEnvelope: IncomingMessageEnvelope, messageCollector: MessageCollector, taskCoordinator: TaskCoordinator): Unit = {
    val event = (incomingMessageEnvelope getMessage).asInstanceOf[Map[String, Date]]
    val symbol = (event get "symbol").asInstanceOf[String]
    val eventDate = (event get "date").asInstanceOf[Date]

    (store get symbol) match {
      case x: java.util.Date if x.equals(eventDate) || x.after(eventDate) => _ 
      case _ => {
        this.store.put(symbol, eventDate)
      }
    }
  }

返回此错误:

Error:(30, 38) unbound placeholder parameter
  case x if isGreaterOf(x, x) => _
                                 ^

你知道错误吗?

谢谢

此致

詹卢卡

1 个答案:

答案 0 :(得分:6)

Exception与您的代码不匹配,但有一行会引发相同的错误:

case x: java.util.Date if x.equals(eventDate) || x.after(eventDate) => _ 

因为_是占位符,可以在匹配和返回类型的模式中使用。它不能用于表示Unit返回值。要在不执行代码的情况下返回Unit值,您可以执行

case x: java.util.Date if x.equals(eventDate) || x.after(eventDate) => ()

代替。