用于向Scala Actors发送消息的符号或案例类?

时间:2009-10-23 12:19:44

标签: scala symbols actor case-class

在Scala actor示例中,我已经看到了向参与者发送无参数消息的位置(例如this),case class es(或case object s)已创建然后用作消息。符号也可以工作,看起来有点整洁,在读完Erlang的书后,看起来更自然。我假设符号相等对远程参与者有效。

对于带参数的消息,案例类是明显的选择,因此消息类型之间的一致性可能是一个问题吗?

有没有理由采用这两种方法?

2 个答案:

答案 0 :(得分:6)

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

即使思想符号可以用作消息,它们甚至比案例对象更简洁(无需定义它们),编译器无法检测拼写错误的符号,您将很难弄清楚为什么演员没有收到应该具体的消息。

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

答案 1 :(得分:3)

我不认为Symbol可以替代使用case类。事实上,我并不完全确定Symbol的用途是什么,因为它缺乏其他语言中符号的强大功能(例如Ruby,Smalltalk) - 它只是一个实习字符串。

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

至于case 对象,我也相信这些符号优于符号。例如,它们可以是trait等的实例,从而提供功能。