Символы или тематические классы для отправки сообщений в Scala Actors?
-
06-07-2019 - |
Вопрос
В примерах актера Scala я видел, где актеру отправляется сообщение без параметров (например, this ), case case
es (или case object
s) были созданы и затем использованы в качестве сообщений. Символы работают так же хорошо и выглядят немного аккуратнее и после прочтения книги по Erlang кажутся более естественными. Я предполагаю, что равенство символов будет работать для удаленных актеров.
Для сообщений с параметрами классы case были бы очевидным выбором, поэтому, возможно, согласованность между типами сообщений является одной из проблем? Р>
Есть ли причины для того или иного подхода?
Решение
Я не думаю, что Symbol
являются заменой для использования классов case
. На самом деле, я не совсем уверен, для чего вообще используется Symbol
, поскольку ему не хватает мощности символов в других языках (например, Ruby, Smalltalk) - это просто внутренняя строка.
Например, в стандартном примере аукциона трудно понять, как вы представляете сложность заявки / предложения, используя только символы.
Что касается case
objects , я также считаю, что они предпочтительнее символов. Например, они могут быть экземплярами trait
и т. Д. И, следовательно, предоставлять функциональность.
Другие советы
Короткий ответ - проверка во время компиляции.
Даже мысленные символы могут использоваться в качестве сообщений, и они даже более кратки, чем объекты case (нет необходимости определять их), компилятор не может обнаружить символы с ошибками, и вам будет трудно понять, почему актеры не получают конкретные сообщения, когда они должны.
Если в качестве сообщений используются классы дел и / или объекты, компилятор сообщит вам, пытаетесь ли вы отправлять и / или получать несуществующие сообщения до того, как программа будет выполнена. Р>