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

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

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

有帮助吗?

解决方案

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

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

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

其他提示

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top