一直在努力学习如何制作一个简单的scala演员



我正在尝试掌握scala actor(我正在阅读"scala for the patience"),下面的简短示例没有像我预期的那样工作。

我有想要发送给actor的消息的case类:

abstract class Message
case class Sum(x: Int, y: Int) extends Message
case class Stop() extends Message

以及演员应该如何处理它们:

import scala.actors.Actor
class Adder(val idx: Int) extends Actor {
  def act() {
    while(true) {
      receive {
        case Sum(x: Int, y: Int) => println("Total: " + (x+y) + ", by " + idx)
        case Stop => exit()
        case _ => println("Wrong message sent to: " + idx  + "!")
      }
    }
  }
}

在主对象中,我创建了一个Adder实例并发送了一些消息:

object Main extends App{
  val adder = new Adder(0)
  println("Init")
  adder ! "Rafael"
  adder ! Sum(2, 3)
  adder ! Sum(5, 6)
  adder ! Stop()
  println("goodbye!")
}

但是唯一的输出是打印"Init"one_answers"goodbye!"我似乎找不出代码有什么问题。在尝试这一个之前,我有一些工作演员,只是使用相同的模式。我哪里做错了?

谢谢。

程序在actor收到消息之前退出。

可以在println("goodbye!")之前添加Thread.sleep(1000)作为hotfix。

代替Thread.sleep,你可以等待你的演员的回答。在这种情况下,演员应该回复Stop消息。

请注意scala actor已被弃用,所以您应该使用akka actor。

没有参数的case类也不推荐使用,请使用case object Stop extends Message而不是case class

相关内容

  • 没有找到相关文章