2009-10-23 26 views
3

Dans les exemples d'acteur Scala j'ai vu où un message sans paramètre est envoyé à un acteur (tel que this), case class es (ou case object s) ont été créés et ensuite utilisés comme messages. Les symboles fonctionnent aussi bien et semblent un peu plus nets et, après avoir lu un livre sur Erlang, semblent plus naturels. Je suppose que l'égalité des symboles fonctionnerait pour les acteurs distants.Symboles ou classes de cas pour envoyer des messages à Scala Actors?

Pour les messages avec des paramètres, les classes de cas seraient le choix évident, alors peut-être que la cohérence entre les types de message est un problème?

Y a-t-il des raisons d'opter pour l'une ou l'autre approche?

Répondre

3

Je ne pense pas que Symbol s sont un substitut pour l'utilisation des classes case. En fait, je ne suis pas tout à fait sûr de ce qu'est l'utilisation Symbol, étant donné qu'il n'a pas la puissance des symboles dans d'autres langages (par exemple Ruby, Smalltalk) - c'est juste une chaîne interne. Par exemple, dans l'exemple d'enchères standard, il est difficile de voir comment vous représenteriez la complexité d'une offre/offre en utilisant uniquement des symboles.

Comme pour caseobjets, je crois aussi que ceux-ci sont préférables aux symboles. Par exemple, ils peuvent être des instances de trait etc, et donc fournir des fonctionnalités.

6

La réponse courte est la vérification à la compilation.

Même les symboles de pensée peuvent être utilisés comme messages et ils sont encore plus succincts que les objets de cas (inutile de les définir), le compilateur ne peut pas détecter les symboles mal orthographiés et vous aurez du mal à comprendre recevoir des messages spécifiques quand ils sont censés le faire.

Si des classes de cas et/ou des objets sont utilisés comme messages, le compilateur vous dira si vous essayez d'envoyer et/ou de recevoir des messages inexistants avant même que le programme ne soit exécuté.

+0

Très bon point. – Joe

+0

Je préfère les symboles, ils sont plus intuitifs et je peux écrire des scripts pour les valider. Et quoi de plus, pas de dépendance commune pour les acteurs distants. – luikore