我是否需要为要在scala actor上检索的消息定义类?
我试图解决这个问题 我哪里错了
def act() {
loop {
react {
case Meet => foundMeet = true ; goHome
case Feromone(qty) if (foundMeet == true) => sender ! Feromone(qty+1); goHome
}}}
答案 0 :(得分:7)
您可以将其视为正常模式匹配,如下所示。
match (expr)
{
case a =>
case b =>
}
所以,是的,你应该首先定义它,使用没有参数的Message的对象和那些有参数的case类。 (正如Silvio Bierman指出的那样,事实上,你可以使用任何可以模式匹配的东西,所以我稍微修改了这个例子)
以下是示例代码。
import scala.actors.Actor._
import scala.actors.Actor
object Meet
case class Feromone (qty: Int)
class Test extends Actor
{
def act ()
{
loop {
react {
case Meet => println ("I got message Meet....")
case Feromone (qty) => println ("I got message Feromone, qty is " + qty)
case s: String => println ("I got a string..." + s)
case i: Int => println ("I got an Int..." + i)
}
}
}
}
val actor = new Test
actor.start
actor ! Meet
actor ! Feromone (10)
actor ! Feromone (20)
actor ! Meet
actor ! 123
actor ! "I'm a string"
答案 1 :(得分:4)
严格来说,您可以使用任何对象作为消息值。如果您愿意,可以是Int
,String
或Seq[Option[Double]]
消息。
除了游戏代码之外,我使用自定义不可变消息类(case-classes)。