На самом деле это не назначение, а операция сопоставления (знак равенства на самом деле является оператором сопряжения). См. http://erlang.org/doc/reference_manual/patterns.html
Что на самом деле происходит, так это то, что вы пытаетесь «сопоставить образец» с левой стороной оператора (=) против того, что находится справа.
Если есть переменная с левой стороны и она еще не ограничена, она будет ограничена значением, которое вы имеете на правой стороне.
С другой стороны, если переменная уже связана и значение совпадает с тем, что находится на правой стороне оператора, ничего не происходит, совпадение просто преуспевает.
Если значения разные, возникает ошибка совпадения шаблонов.
Обратите внимание, что специальная переменная «_» всегда будет иметь успех, если шаблон соответствует любому значению.
Совместимость шаблонов в Erlang действительно полезна, потому что вы можете быстро сработать, когда что-то не так. Например, в этом коде:
{ok, Value} = some_function()
Если some_function/0 возвращает что-то вроде {ошибка, _} ваш код будет просто крах и вы не рискуете, чтобы продолжить выполнение с недопустимыми значениями.
Если some_function возвращает ожидаемое значение, значение переменной теперь будет ограничено этим результатом, это похоже на присвоение и утверждение в одной строке кода (если вы хотите посмотреть на него таким образом).
Имеет смысл?
Да, это имеет смысл, спасибо. Похоже, что у Erlang нет традиционного механизма назначения переменных, как я привык видеть на других языках. –
Отлично! Обратите внимание, что сопоставление шаблонов имеет много применений в Erlang, которые я оставил вне ответа, потому что вы специально задали вопрос об одном прецеденте, но вы можете использовать сопоставление шаблонов в предложениях функций, try-catch, case и т. Д. Использование сопоставления шаблонов обычно дает ваш код более ясность и отличный способ избежать ошибок ifs и spot в коде. Вы можете прочитать больше в этой замечательной книге http://learnyousomeerlang.com/syntax-in-functions Cheers! – marcelog