【问题标题】:Scala, Akka, Child Actor Why "discarded non-Unit value"?Scala,Akka,Child Actor 为什么“丢弃非单元值”?
【发布时间】:2015-07-03 19:25:58
【问题描述】:

您好,目前我在使用 Akka 和子 Actor 时在 Scala 上收到以下错误:

[warn] /Users/schmitch/projects/envisia/envisia-erp-loki/app/worker/CalculationWorker.scala:43: discarded non-Unit value
[warn]       } yield cb1).map { data =>
[warn]                        ^
[warn] one warning found

目前我的演员收到:

 override def receive = {
    case cm: CalculationModal =>
      val upper = sender() // To get the real sender we need to first have a good reference to him
      log.debug(s"Got a new calculation")
      (for {
        cb1 <- (cn ? true).mapTo[Boolean]
      } yield cb1).map { data =>

        log.debug(s"Callback1: $data")
        upper ! data
      }
  }

还有童星的收视:

  override def receive = {
    case _ =>
      println(s"WS: $ws")
      sender() ! true
  }

但是我不知道为什么会收到此警告,因为第 43 行是应为布尔值且不会被丢弃的屈服线...目前稍后我想要 2 个具有 2 个回调 cb1 的子演员和 cb2 将独立计算,以便我有更好的并发性。

目前对于我的测试,它们都只返回 true。

【问题讨论】:

    标签: scala akka


    【解决方案1】:

    将您的 map 更改为 foreach

    receivePartialFunction[Any, Unit] 并在Future 上调用.map 会产生另一个Future,而不是Unit。调用.foreach 而不是确实 产生Unit

    【讨论】:

    • 我可以轻松地将其更改为 foreach 吗?
    • 我稍微澄清了我的回答并放弃了插入() 行的糟糕建议,因为所有要做的就是返回Future[Unit],它仍然不是Unit
    • 谢谢。我不知道的是 PartialFunction[Any, Unit]。我想如果我有一个询问模式,我需要在最后得到某种回报,但是当我发现询问模式只是向 sender() 发送一条消息。但是,我需要在 foreach sind 中声明 val mySender = sender() 和用户 mySender ! "msg",这将有自己的 sender()。
    猜你喜欢
    • 2019-08-20
    • 2012-03-10
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多