我需要为我想要在scala演员上检索的消息定义类吗?斯卡拉演员消息定义
我试图让这件事 我在哪里错了
def act() {
loop {
react {
case Meet => foundMeet = true ; goHome
case Feromone(qty) if (foundMeet == true) => sender ! Feromone(qty+1); goHome
}}}
我需要为我想要在scala演员上检索的消息定义类吗?斯卡拉演员消息定义
我试图让这件事 我在哪里错了
def act() {
loop {
react {
case Meet => foundMeet = true ; goHome
case Feromone(qty) if (foundMeet == true) => sender ! Feromone(qty+1); goHome
}}}
你可以把它作为一个正常的模式匹配,就像下面。
match (expr)
{
case a =>
case b =>
}
所以,是的,你应该首先定义它,使用消息对象没有参数和case类为那些有参数。 (正如西尔维奥·比尔曼所指出的,事实上,你可以使用任何可以模式匹配的东西,所以我稍微修改了这个例子)
以下是示例代码。
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"
严格来说不,您可以使用任何对象作为消息值。如果您愿意,消息可以是Int
,String
或Seq[Option[Double]]
。
对于除游戏码外的任何东西,我使用自定义不可变消息类(case-classes)。
这是很好的答案! 我想知道你从哪里得到这些信息。 因为在官方教程中,没有那么多的信息。 您是否阅读过“scala编程”书籍或其他网站? – benzen 2010-06-11 12:10:03
@ BenZen 是的,我读了“scala编程”,它说接收的参数是一个部分函数。这意味着你可以使用模式匹配。 我建议你获得Martin Odersky编写的“Programming in Scala”的副本,这是一本很棒的书,并以全面的方式介绍Scala。 – 2010-06-12 00:12:11