在Scala actor示例中,我已经看到了向参与者发送无参数消息的位置(例如this),case class
es(或case object
s)已创建然后用作消息。符号也可以工作,看起来有点整洁,在读完Erlang的书后,看起来更自然。我假设符号相等对远程参与者有效。
对于带参数的消息,案例类是明显的选择,因此消息类型之间的一致性可能是一个问题吗?
有没有理由采用这两种方法?
答案 0 :(得分:6)
简短的回答是编译时检查。
即使思想符号可以用作消息,它们甚至比案例对象更简洁(无需定义它们),编译器无法检测拼写错误的符号,您将很难弄清楚为什么演员没有收到应该具体的消息。
如果将案例类和/或对象用作消息,编译器将告诉您在程序执行之前是否尝试发送和/或接收不存在的消息。
答案 1 :(得分:3)
我不认为Symbol
可以替代使用case
类。事实上,我并不完全确定Symbol
的用途是什么,因为它缺乏其他语言中符号的强大功能(例如Ruby,Smalltalk) - 它只是一个实习字符串。
例如,在标准拍卖示例中,很难看出如何仅使用符号来表示出价/报价的复杂程度。
至于case
对象,我也相信这些符号优于符号。例如,它们可以是trait
等的实例,从而提供功能。