Учебники

Эликсир — образец соответствия

Сопоставление с образцом — это техника, которую Эликсир наследует от Эрланга. Это очень мощный метод, который позволяет нам извлекать более простые подструктуры из сложных структур данных, таких как списки, кортежи, карты и т. Д.

Матч состоит из двух основных частей: левой и правой . Правая сторона — это структура данных любого типа. Левая сторона пытается сопоставить структуру данных с правой стороны и связать любые переменные слева с соответствующей подструктурой справа. Если совпадение не найдено, оператор выдает ошибку.

Самое простое совпадение — это одиночная переменная слева и любая структура данных справа. Эта переменная будет соответствовать чему угодно . Например,

Live Demo

x = 12
x = "Hello"
IO.puts(x)

Вы можете разместить переменные внутри структуры, чтобы захватить субструктуру. Например,

[var_1, _unused_var, var_2] = [{"First variable"}, 25, "Second variable" ]
IO.puts(var_1)
IO.puts(var_2)

Это сохранит значения {«Первая переменная»} в var_1 и «Вторая переменная» в var_2 . Существует также специальная переменная _ (или переменные с префиксом ‘_’), которая работает точно так же, как и другие переменные, но говорит elixir: «Убедитесь, что что-то здесь, но мне все равно, что это такое». , В предыдущем примере _unused_var была одной из таких переменных.

Мы можем сопоставить более сложные образцы, используя эту технику. Например, если вы хотите развернуть и получить номер в кортеже, который находится внутри списка, который сам находится в списке, вы можете использовать следующую команду —

Live Demo

[_, [_, {a}]] = ["Random string", [:an_atom, {24}]]
IO.puts(a)

Вышеуказанная программа генерирует следующий результат —

24

Это свяжет a с 24. Другие значения игнорируются, так как мы используем ‘_’.

В сопоставлении с образцом, если мы используем переменную справа , используется ее значение. Если вы хотите использовать значение переменной слева, вам нужно использовать оператор pin.

Например, если у вас есть переменная «a», имеющая значение 25, и вы хотите сопоставить ее с другой переменной «b», имеющей значение 25, то вам нужно ввести —

a = 25
b = 25
^a = b

Последняя строка соответствует текущему значению a , а не присваивает его значению b . Если у нас есть несоответствующий набор левой и правой стороны, оператор соответствия вызывает ошибку. Например, если мы попытаемся сопоставить кортеж со списком или список размером 2 со списком размера 3, появится сообщение об ошибке.