繁体   English   中英

Scala中Unit的扩展功能缺少参数类型

[英]Missing parameter type for expanded function for Unit in scala

我正在尝试在数据库事务中包装一些参与者接收代码,以构建幂等的持久性视图,该持久性视图通过更新数据库中的信息来处理事件。

class TrajectoryView extends IdempotentView {


  override def viewId: String = "trajectoryView"

  override def persistenceId: String = "sample-id-1"

  override def handleEvent(event: Event): Unit = {
      case ProcessDetectedEvent(time, processData, id, activityType) =>
        val coords = Db.save(processData.coordinates)
        Db.save(CoordinatesWrapper(id, coords))

      case ProcessUpdatedEvent(id, processData, time) =>
        val coords = Db.save(processData.coordinates)
        Db.save(CoordinatesWrapper(id, coords))
  }
}

abstract class IdempotentView extends PersistentView {

  def handleEvent(event: Event): Unit = ???
  var maxSeenSeqNumber = Db.query[SeqNumberWrapper].fetchOne().getOrElse(SeqNumberWrapper(0, viewId)).seqNumber

  def receive: Receive = {
    case event: Event =>
      if (lastSequenceNr > maxSeenSeqNumber) {
        Db.transaction {
          Db.save(SeqNumberWrapper(lastSequenceNr, viewId))
          handleEvent(event)
        }
      }

    case _: Unit =>
      println("Unknown message")
  }
}



Error:(22, 50) missing parameter type for expanded function The argument types of an anonymous function must be fully known. (SLS 8.5) 

Expected type was: Unit   override def handleEvent(event: Event): Unit = { 

我该怎么办? 我不知道该错误的确切含义。 从我的角度来看,我已经编写了所有类型,编译器不需要推断任何内容。

选择以下一种

override def handleEvent:  Event => Unit = {
...
}

要么

override def handleEvent(event: Event): Unit = event match {
...
}

如果更精确地讲,括号内的代码适合于定义PartialFunction[T,Unit] ,它可以转换为Unit 因此,通常来说,您的代码是正确的,但是编译器无法推断T类型并对此发牢骚。 但是,如果可能导致某个函数返回另一个函数,而不是您期望的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM