OxL Справочник OxL
РусскийEnglish

5.5 Сопоставление с образцом

oxl
match result {
  Receipt r if r.amount > LIMIT => review(r)
  Receipt r                     => ok(r)
  Declined(reason)              => warn(reason)
  Timeout | Unavailable         => retryLater()
  _                             => fail Unknown
}
ОбразецПример
литерал, диапазон0, "x", 1..=9
заполнитель_
привязкаx, mut-привязка: var x
типReceipt, с привязкой Receipt r
вариант enumCircle(r), .Circle(r), Rect(w: w, ..)
dataUser{ name, role: .Admin, .. }
кортеж(a, _, c)
список/срез[], [x], [first, ..rest]
альтернативаA | B (привязки во всех ветках одинаковы)
охранаобразец if условие

match ДОЛЖЕН быть исчерпывающим. Ветки разделяются переводом строки или запятой; тело ветки — выражение или блок.

Дополнительный образец: x? — совпадает с любым значением, кроме none, и привязывает его к x (while let d? = queue.pop() { … }).

non-exhaustive, pattern-bindings, unreachable-arm

См. также

Исходник: docs/spec/oxl-standard.md