问题描述
我不明白,为什么我在“ timers.startTimerWithFixedDelay”内收到重载错误。我添加了3个参数以确保采用正确的方法,但看来他也发现只有2个参数的方法具有很高的吸引力。
package main
import akka.actor.typed.{ActorSystem,Behavior}
import akka.actor.typed.receptionist.Receptionist
import akka.actor.typed.scaladsl.Behaviors
import scala.concurrent.duration.{Duration,FiniteDuration,MINUTES}
object Guardian {
case object Tick
val start: Behavior[nothing] =
Behaviors.setup[Receptionist.Listing] { context =>
Behaviors.withTimers { timers =>
timers.startTimerWithFixedDelay(Tick,Tick,FiniteDuration(Duration("3 seconds").toSeconds,MINUTES))
Behaviors.same
}
}.narrow
}
object Application extends App {
ActorSystem[nothing](Guardian.start,"system")
}
在TimerScheduler.scala内部,他无法做出选择:
def startTimerWithFixedDelay(msg: T,delay: FiniteDuration): Unit
def startTimerWithFixedDelay(key: Any,msg: T,delay: FiniteDuration): Unit
为什么他不带3个参数?
编译器错误消息:
[error] ... overloaded method startTimerWithFixedDelay with alternatives:
[error] (msg: akka.actor.typed.receptionist.Receptionist.Listing,delay: scala.concurrent.duration.FiniteDuration)Unit <and>
[error] (key: Any,msg: akka.actor.typed.receptionist.Receptionist.Listing,delay: scala.concurrent.duration.FiniteDuration)Unit
解决方法
Tick
不是Receptionist.Listing
,所以两个版本都不匹配。