3

在 Scala Actor 示例中,我看到了将无参数消息发送给 Actor(例如this)的位置,创建了case classes(或case objects),然后将其用作消息。符号也可以工作,看起来更整洁,并且在阅读了一本关于 Erlang 的书之后,看起来更自然。我假设符号平等适用于远程参与者。

对于带有参数的消息,案例类将是显而易见的选择,所以消息类型之间的一致性可能是一个问题?

有任何理由采用这两种方法吗?

4

2 回答 2

6

简短的回答是编译时检查。

即使认为符号可以用作消息并且它们比 case 对象更简洁(无需定义它们),编译器也无法检测到拼写错误的符号,并且您将很难弄清楚为什么演员在他们应该这样做。

如果案例类和/或对象用作消息,编译器会在程序执行之前告诉您是否尝试发送和/或接收不存在的消息。

于 2009-10-23T13:41:27.027 回答
3

我不认为Symbols 可以替代使用case类。事实上,我根本不完全确定它有什么用Symbol,因为它缺乏其他语言(例如 Ruby、Smalltalk)中符号的力量——它只是一个实习字符串。

例如,在标准拍卖示例中,很难看出您将如何仅使用符号来表示出价/出价的复杂性。

至于case 对象,我也相信这些比符号更可取。例如,它们可以是traits 等的实例,因此可以提供功能。

于 2009-10-23T13:38:41.497 回答