2010-06-11 5 views
3

Ai-je besoin de définir une classe pour un message que je veux récupérer sur un acteur de scala?scala acteur définition de message

i essayer d'obtenir ce jusqu'à où je me trompe

def act() { 
    loop { 
     react { 
     case Meet => foundMeet = true ; goHome 
     case Feromone(qty) if (foundMeet == true) => sender ! Feromone(qty+1); goHome 
    }}} 

Répondre

7

Vous pouvez penser comme un modèle normal correspondant comme suit. Donc, oui, vous devriez le définir en premier, utiliser l'objet pour Message sans paramètres et la classe de cas pour ceux qui ont des paramètres. (Comme Silvio Bierman l'a fait remarquer, en fait, vous pouvez utiliser n'importe quel type de pattern, donc j'ai légèrement modifié cet exemple)

Ce qui suit est l'exemple de code.

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" 
+0

C'était la bonne réponse !! Je me demande où vous avez obtenu cette information. Parce que sur le tutoriel officiel, il n'y a pas beaucoup d'informations. Avez-vous lu le livre "programming in scala", ou un autre site web? – benzen

+0

@BenZen Oui, je lis "programmation en scala", et il dit que l'argument de receive est une fonction partielle. Ce qui signifie que vous pouvez utiliser le motif correspondant. Je vous recommande d'obtenir une copie de "Programming in Scala" écrit par Martin Odersky, c'est un livre génial et présentez Scala de manière exhaustive. –

4

Strictement non, vous pouvez utiliser n'importe quel objet comme valeur de message. Un message peut être un Int, String ou un Seq[Option[Double]] si vous le souhaitez.

Pour tout sauf le code de jeu, j'utilise des classes de message personnalisées immuables (classes de cas).

Questions connexes