Атомы подобны открытому перечислению, с бесконечными возможными значениями, и не нужно ничего объявлять заранее.Вот как они обычно используются на практике.
Например, в Erlang процесс ожидает получения одного из нескольких типов сообщений, и наиболее удобно пометить сообщение атомом.Большинство других языков используют перечисление для типа сообщения, а это означает, что всякий раз, когда я хочу отправить сообщение нового типа, я должен добавить его в объявление.
Кроме того, в отличие от перечислений, наборы значений атомовможно комбинироватьПредположим, я хочу контролировать состояние процесса Erlang, и у меня есть какой-то стандартный инструмент мониторинга состояния.Я могу расширить свой процесс для ответа на протокол сообщений о состоянии , а также на другие типы сообщений .Как решить эту проблему с перечислениями?
enum my_messages {
MSG_1,
MSG_2,
MSG_3
};
enum status_messages {
STATUS_HEARTBEAT,
STATUS_LOAD
};
Проблема в том, что MSG_1 равен 0, а STATUS_HEARTBEAT также равно 0. Когда я получаю сообщение типа 0, что это?С атомами у меня нет этой проблемы.
Атомы / символы - это не просто строки с постоянным сравнением времени:).