[英]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.