在 Scala Actor 示例中,我看到了将无参数消息发送给 Actor(例如this)的位置,创建了case class
es(或case object
s),然后将其用作消息。符号也可以工作,看起来更整洁,并且在阅读了一本关于 Erlang 的书之后,看起来更自然。我假设符号平等适用于远程参与者。
对于带有参数的消息,案例类将是显而易见的选择,所以消息类型之间的一致性可能是一个问题?
有任何理由采用这两种方法吗?
在 Scala Actor 示例中,我看到了将无参数消息发送给 Actor(例如this)的位置,创建了case class
es(或case object
s),然后将其用作消息。符号也可以工作,看起来更整洁,并且在阅读了一本关于 Erlang 的书之后,看起来更自然。我假设符号平等适用于远程参与者。
对于带有参数的消息,案例类将是显而易见的选择,所以消息类型之间的一致性可能是一个问题?
有任何理由采用这两种方法吗?
简短的回答是编译时检查。
即使认为符号可以用作消息并且它们比 case 对象更简洁(无需定义它们),编译器也无法检测到拼写错误的符号,并且您将很难弄清楚为什么演员在他们应该这样做。
如果案例类和/或对象用作消息,编译器会在程序执行之前告诉您是否尝试发送和/或接收不存在的消息。
我不认为Symbol
s 可以替代使用case
类。事实上,我根本不完全确定它有什么用Symbol
,因为它缺乏其他语言(例如 Ruby、Smalltalk)中符号的力量——它只是一个实习字符串。
例如,在标准拍卖示例中,很难看出您将如何仅使用符号来表示出价/出价的复杂性。
至于case
对象,我也相信这些比符号更可取。例如,它们可以是trait
s 等的实例,因此可以提供功能。