Scalaアクターにメッセージを送信するためのシンボルまたはケースクラス?
-
06-07-2019 - |
質問
Scalaアクターの例では、パラメーターなしのメッセージがアクターに送信される場所を見ました( this )、 caseクラス
es(または caseオブジェクト
s)が作成され、メッセージとして使用されています。シンボルも同様に機能し、少し見栄えがよく、Erlangの本を読んだ後、より自然に見えます。シンボルの等価性はリモートアクターに対して機能すると想定しています。
パラメータ付きのメッセージの場合、クラスクラスは当然の選択となるので、おそらくメッセージタイプ間の一貫性が1つの問題ですか?
いずれかのアプローチを採用する理由はありますか?
解決
Symbol
は、 case
クラスを使用する代わりになるとは思いません。実際、他の言語(Ruby、Smalltalkなど)のシンボルの力が欠けているため、 Symbol
の使用がまったくわからない-それは単なるインターンされた文字列です。
たとえば、標準的なオークションの例では、シンボルのみを使用して入札/オファーの複雑さをどのように表現するかを見るのは困難です。
case
オブジェクトに関しては、これらはシンボルよりも望ましいと考えています。たとえば、それらは trait
などのインスタンスである可能性があるため、機能を提供します。
他のヒント
簡単な答えは、コンパイル時のチェックです。
思考シンボルもメッセージとして使用でき、ケースオブジェクトよりも簡潔です(定義する必要はありません)、コンパイラはスペルミスのシンボルを検出できず、アクターが受信しない理由を理解するのに苦労します想定される特定のメッセージ。
ケースクラスおよび/またはオブジェクトがメッセージとして使用される場合、コンパイラは、プログラムが実行される前に存在しないメッセージを送信または受信しようとしているかどうかを通知します。