Symbole oder Fallklassen für Nachrichten an Scala Schauspieler zu senden?
-
06-07-2019 - |
Frage
In der Scala Schauspieler Beispiele, die ich gesehen habe, wo eine parameterlos Nachricht an einen Schauspieler gesendet wird (wie diese ), case class
es (oder case object
s) erstellt und dann als Nachrichten verwendet wurden. Symbole funktionieren genauso gut und sehen ein bisschen übersichtliche und nach einem Buch über Erlang lesen, scheinen natürlicher. Ich gehe davon aus, dass Symbol Gleichheit für Fern Akteure funktionieren würde.
Für Nachrichten mit Parametern Fallklassen die offensichtliche Wahl, wären so vielleicht Konsistenz zwischen Nachrichtentypen ist ein Problem?
Gibt es Gründe für beide Ansatz gehen?
Lösung
Ich glaube nicht, dass Symbol
s Ersatz für case
Klassen. In der Tat, ich bin nicht ganz sicher, welche Verwendung Symbol
überhaupt ist, da es die Kraft der Symbole in anderen Sprachen fehlen (zum Beispiel Ruby Smalltalk.) - es ist nur ein interniert String
Zum Beispiel in dem Standard-Auktion Beispiel, ist es schwierig zu sehen, wie man die Komplexität eines Kauf- / Verkaufsgebot darstellen würde Symbole allein.
Wie bei case
Objekte , ich glaube auch, dass diese Symbole zu bevorzugen sind. Zum Beispiel können sie Instanzen von trait
s usw. sein, und somit Funktionalität liefern.
Andere Tipps
Die kurze Antwort ist kompilieren Zeit zu überprüfen.
dachte Auch Symbole als Nachrichten verwendet werden können, und sie sind noch prägnanter als Fall-Objekte (keine Notwendigkeit, sie zu definieren), Compiler die falsch geschriebenen Symbole nicht erkennen kann, und Sie werden eine harte Zeit herauszufinden haben, warum Akteure nicht erhalten spezifische Nachrichten, wenn sie sollen.
Wenn Fallklassen und / oder Objekte als Nachrichten verwendet werden, Compiler werden Ihnen sagen, wenn Sie versuchen, Nachrichten zu senden und / oder empfangen nicht existent, bevor das Programm noch ausgeführt wird.