Сопоставление (pattern matching)
Сопоставление или pattern matching, это еще один способ присвоения, извлечения значений из списков или кортежей. Работает это так – сравнивается две переменные, если они не эквивалентны по типу или по значению возникнет исключение (ошибка). Если они равны, но отличаются только в переменных, то переменным в левой части выражения будет присвоено соответстветствующие значения справа. Проще всего это тоже пояснить на примере. Напомню, переменные всегда начинаются с заглавной:
1> {A, B} = {111, 222}. {111,222} 2> A. 111 3> B. 222 4> [Head|Tail] = [1,2,3,4,5]. [1,2,3,4,5] 5> Head. 1 6> Tail. [2,3,4,5] 7> {1,2,X} = {1,2,3}. {1,2,3} 8> X. 3
А вот несколько примеров сопоставления которые не будут работать:
1> [A] = [1,2]. ** exception error: no match of right hand side value [1,2] 2> {A, B} = [1,2]. ** exception error: no match of right hand side value [1,2] 3> [A, 1] = [1, 2]. ** exception error: no match of right hand side value [1,2] 4>
Знак подчеркивания можно использовать для игнорирования значений в левой части выражения:
1> {A, B, _} = {1, 2, 3}. {1,2,3} 2> {1, 2, C, _} = {A, B, 3, 4}. {1,2,3,4} 3> C. 3 4> B. 2 5> A. 1