简体   繁体   English

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

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

I'm trying to wrap some actor receive code in db transaction to build idempotent persistent view that handles events by updating the information in database. 我正在尝试在数据库事务中包装一些参与者接收代码,以构建幂等的持久性视图,该持久性视图通过更新数据库中的信息来处理事件。

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 = { 

What should I do? 我该怎么办? I don't event understand what this error means exactly. 我不知道该错误的确切含义。 From my point of view I have written all types, the compiler doesn't need to infer anything. 从我的角度来看,我已经编写了所有类型,编译器不需要推断任何内容。

Choose one of 选择以下一种

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

or 要么

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

If more precisely your code inside braces is suitable for defining PartialFunction[T,Unit] which is convertible to Unit . 如果更精确地讲,括号内的代码适合于定义PartialFunction[T,Unit] ,它可以转换为Unit So generally your code is correct, but compiler could not infer type T and whines about it. 因此,通常来说,您的代码是正确的,但是编译器无法推断T类型并对此发牢骚。 But if it could result would be a function returning another function and not what you are expecting. 但是,如果可能导致某个函数返回另一个函数,而不是您期望的结果。

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

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