match
macro
boot.janet on line 1733, column 1
(match x & cases)
Pattern matching. Match an expression `x` against any number of
cases. Each case is a pattern to match against, followed by an
expression to evaluate to if that case is matched. Legal patterns
are:
* symbol -- a pattern that is a symbol will match anything, binding
`x`'s value to that symbol.
* array or bracket tuple -- an array or bracket tuple will match
only if all of its elements match the corresponding elements in
`x`. Use `& rest` at the end of an array or bracketed tuple to
bind all remaining values to `rest`.
* table or struct -- a table or struct will match if all values
match with the corresponding values in `x`.
* tuple -- a tuple pattern will match if its first element matches,
and the following elements are treated as predicates and are
true.
* `_` symbol -- the last special case is the `_` symbol, which is a
wildcard that will match any value without creating a binding.
While a symbol pattern will ordinarily match any value, the pattern
`(@ <sym>)`, where <sym> is any symbol, will attempt to match `x`
against a value already bound to `<sym>`, rather than matching and
rebinding it.
Any other value pattern will only match if it is equal to `x`.
Quoting a pattern with `'` will also treat the value as a literal
value to match against.