Символы или тематические классы для отправки сообщений в Scala Actors?

StackOverflow https://stackoverflow.com/questions/1613068

Вопрос

В примерах актера Scala я видел, где актеру отправляется сообщение без параметров (например, this ), case case es (или case object s) были созданы и затем использованы в качестве сообщений. Символы работают так же хорошо и выглядят немного аккуратнее и после прочтения книги по Erlang кажутся более естественными. Я предполагаю, что равенство символов будет работать для удаленных актеров.

Для сообщений с параметрами классы case были бы очевидным выбором, поэтому, возможно, согласованность между типами сообщений является одной из проблем?

Есть ли причины для того или иного подхода?

Это было полезно?

Решение

Я не думаю, что Symbol являются заменой для использования классов case . На самом деле, я не совсем уверен, для чего вообще используется Symbol , поскольку ему не хватает мощности символов в других языках (например, Ruby, Smalltalk) - это просто внутренняя строка.

Например, в стандартном примере аукциона трудно понять, как вы представляете сложность заявки / предложения, используя только символы.

Что касается case objects , я также считаю, что они предпочтительнее символов. Например, они могут быть экземплярами trait и т. Д. И, следовательно, предоставлять функциональность.

Другие советы

Короткий ответ - проверка во время компиляции.

Даже мысленные символы могут использоваться в качестве сообщений, и они даже более кратки, чем объекты case (нет необходимости определять их), компилятор не может обнаружить символы с ошибками, и вам будет трудно понять, почему актеры не получают конкретные сообщения, когда они должны.

Если в качестве сообщений используются классы дел и / или объекты, компилятор сообщит вам, пытаетесь ли вы отправлять и / или получать несуществующие сообщения до того, как программа будет выполнена.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top