Сопоставление с шаблоном
case x of
1 -> "one"
2 -> "two"
else -> fail
case char of
'A' -> 1
'B' -> 2
else -> fail
case s of
"one" -> 1
"two" -> 2
"3" | "three" -> 3
else -> fail
Можно сравнить значение с числовыми, знаковыми и строковыми литералами.
case maybe_x of
Some x -> x
None -> 0
Именованный кортеж и символ.
case maybe_x of
is Some -> true
is None -> false
Some
и None
являются типами, поэтому могут быть частью is
шаблона.
type Value =
| t@ i32
| t@ String
case value of
x : i32 -> x
s : String -> i32.parse s
Ключевое слово t@
позволяет указать существующий тип.
case value of
is i32 -> value
is String -> i32.parse value
Привязка value
имеет тип i32
в первой руке и String
во второй.
case key of
Key/Enter -> ...
Key/C if mods.contains KeyModifiers/Control ->
...
К шаблону можно добавить условие.
case (maybe_x, maybe_y) of
Some x, Some y -> x + y
Some x, None -> x
None, Some y -> y
None, None -> 0
Скобки кортежа не обязательны.
case maybe_vector of
Some vector@mut_ref -> vector.x = 0
None -> ()
maybe_vector
будет изменён, если содержит значение Some
. Также доступны модификаторы @ref
, @ptr
и @mut_ptr
.
if maybe_x @ Some x then
println x
Выражение в условии проверяет maybe_x
на соответствие одному шаблону.