【问题标题】:Scala: implicit conversion not made?Scala:没有进行隐式转换?
【发布时间】:2018-08-06 09:55:22
【问题描述】:
[error] DeviceAffiliationCluster.scala:56: value ask is not a member of akka.actor.ActorRef
[error]   def ask(msg: Any): Future[Any] = deviceRegion.ask(msg)
[error]                                                 ^
[warn] DeviceAffiliationCluster.scala:5: Unused import
[warn] import akka.pattern.ask

akka.pattern.ask 提供隐式转换(从ActorRefAskableActorRef,后者提供ask 方法)

但是,当我使用 sbt 编译时,无法识别转换。 (Intellij 看到隐式转换并没有问题,但我使用 sbt 构建。)

我可以让它明确地工作:

val deviceRegion: ActorRef =  ...

val deviceRegionAskable: AskableActorRef = deviceRegion

【问题讨论】:

    标签: scala akka implicits


    【解决方案1】:

    问题是您的方法 ask 隐藏了您从 akka.pattern.ask 导入的 ask 方法如果您使用不同的方法名称,那么您的示例可以正常工作

      import akka.actor._
      import akka.pattern.ask
      import scala.concurrent.duration._
      import scala.concurrent._
    
      class FooActor extends Actor {
        def receive = {
        case s: String => sender ! s"Hello $s"
        }}
      val ac = ActorSystem()
      implicit val ec : ExecutionContext = ac.dispatcher
      val fooAc = ac.actorOf(Props[FooActor], "fa")
      implicit val to = new akka.util.Timeout(10 seconds)
      def ask2(msg: Any) : Future[Any] = fooAc.ask("foo")
      val x = Await.result(ask2("foo"), Duration.Inf)
      println(x)
    

    【讨论】:

    • 哦,天哪!谢谢。
    • 但是,等等,我正在寻找一个关于 deviceRegion 的问题,一个成员 val,而不是这个。
    • ask 是一种隐式方法,如果上下文中已经存在询问,则不会提供给您。如果没有询问,则隐式机制查找询问并在 akka.patten.ask 的导入中找到它。
    猜你喜欢
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 2012-04-15
    • 2018-09-16
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多