kw fail
Зарезервированное слово
Список слов: §1.4
Синтаксис
Primary = Literal | Path | "it" | "self" | "(" Expr { "," Expr } ")" | ListLit | MapLit
| StructLit | Lambda | Block | If | Match | For | While | Loop | Scope | Select | Query
| "spawn" ( Postfix | Block ) | "await" Unary | "atomic" [ "(" Args ")" ] Block
| "return" [ Expr ] | "fail" Expr | "yield" Expr | "respond" Expr | "break" [ Label ] [ Expr ]
| "continue" [ Label ] | "emit" Path "(" Expr ")" | "unsafe" Block | "blocking" Block
| "comptime" Block | "." Ident [ "(" [ Args ] ")" ] ;Грамматика: Прил. A
Определяется в
- 5.8 Прочие выражения — defer e — выполняет e при выходе из блока (в том числе при fail, return, отмене), в обратном порядке объявления.
- 6.5 Ошибки — Исключений нет. Ошибка — значение типа, помеченного @error, возвращаемое через объединение.
- 3.1 Примитивы — Целочисленная арифметика.
- 8.4 Цепочки — Цепочка связывает асинхронные шаги так, что выполняется либо вся цепочка, либо возвращается первая необработанная ошибка.
- 10.3 Стримы — Тип stream<T, E = never>.
- 18.4 Симуляция — В sim детерминированы планировщик, сеть, часы, случайность и отказы диска; результат зависит только от seed.
- 1.4 Ключевые слова — Зарезервированные (нельзя использовать как имена)
- 4.3 Конструирование и конструкторы — Литерал. T{ f1: e1, f2, ..base }
Примеры
@error data NotFound { what: str }
@error enum PayError { Declined(reason: str), Fraud }
fn charge(card: Card, sum: Money) -> Receipt | PayError | NetError net {
let token = Vault.tokenize(card)? // ? пробрасывает ошибки вызова
if sum <= Money.zero() { fail PayError.Declined("zero sum") }
Bank.pay(token, sum)
}Связанные диагностики
fail-type, question-context, unhandled-error, it-outside-chain, yield-outside-stream, bad-init, missing-field, must-close, positional-literal, sealed-literal