【问题标题】:Symbols or Case Classes for sending messages to Scala Actors?用于向 Scala Actors 发送消息的符号或案例类?
【发布时间】:2009-10-23 12:19:44
【问题描述】:

在 Scala Actor 示例中,我看到了将无参数消息发送给 Actor(例如this)的地方,case classes(或case objects)已被创建,然后用作消息。符号也同样有效,而且看起来更整洁,并且在阅读了一本关于 Erlang 的书之后,看起来更自然了。我假设符号相等适用于远程参与者。

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

有什么理由选择这两种方法吗?

【问题讨论】:

    标签: scala symbols actor case-class


    【解决方案1】:

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

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

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

    【讨论】:

    • 我更喜欢符号,它们更直观,我可以编写一些脚本来验证它们。更重要的是,远程参与者没有共同的依赖关系。
    【解决方案2】:

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

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

    至于caseobjects,我也认为这些比符号更可取。例如,它们可以是 traits 等的实例,因此可以提供功能。

    【讨论】:

      猜你喜欢
      • 2015-05-27
      • 2014-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 2018-07-10
      • 1970-01-01
      • 2014-04-16
      相关资源
      最近更新 更多