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

kw fail

Зарезервированное слово

Список слов: §1.4

Синтаксис

ebnf
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 }

Примеры

oxl
@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)
}

— 6.5 Ошибки

Связанные диагностики

fail-type, question-context, unhandled-error, it-outside-chain, yield-outside-stream, bad-init, missing-field, must-close, positional-literal, sealed-literal

См. также