Думайте о каждом шаблоне как о шаблоне, который должен соответствовать входу [x y]
или [1 2]
.
Первый шаблон - [1 b]
, который соответствует входу, потому что первый элемент шаблона является совпадающим литералом значение 1
, а второй элемент шаблона - это привязка , которая будет содержать любое значение в этой позиции ввода, которая в данном случае равна 2
. Эта привязка b
доступна с правой стороны предложения match, как если бы это была привязка let
.
Этот пример может продемонстрировать это более четко:
(let [x 1 y 2]
(match [x y]
[1 b] [1 (inc b)] ;; recreate the input with (inc b)
[a 2] a ;; this never matches because prior match works
:else nil))
=> [1 3]
Соответствует ли 2
y
и привязывается к a
?
Шаблон совпадает, но это не имеет значения, потому что предыдущий шаблон уже совпадал. Если бы это было успешное совпадение, a
было бы привязано к 1
.