kw if
Зарезервированное слово — политика (§13.4)
Список слов: §1.4
Синтаксис
Rule = ( "allow" | "deny" ) ( "*" | RTarget { "," RTarget } ) ( "if" | "unless" ) Expr ;MockArm = Ident "(" [ Patterns ] ")" [ "if" Expr ] "=>" MockSeq ;If = "if" ( Expr | "let" Pattern "=" Expr ) Block [ "else" ( If | Block ) ] ;Match = "match" Expr "{" { Pattern [ "if" Expr ] "=>" Expr ( "," | NL ) } "}" ;Грамматика: Прил. A
Определяется в
- 5.4 Условия — Тернарного оператора нет.
- 14.2 Динамическая конфигурация — dynamic Имя { … } — значения хранятся в координаторе, реплицируются на все узлы и меняются без перезапуска.
- 4.3 Конструирование и конструкторы — Литерал. T{ f1: e1, f2, ..base }
- 6.5 Ошибки — Исключений нет. Ошибка — значение типа, помеченного @error, возвращаемое через объединение.
- 1.4 Ключевые слова — Зарезервированные (нельзя использовать как имена)
- 3.5 Объединения и опционалы — A | B — анонимное объединение.
- 5.1 Общие правила — Почти всё — выражения
- 13.4 Авторизация и политики — Объект политики
Примеры
let kind = if n < 0 { "neg" } else if n == 0 { "zero" } else { "pos" }
if let User{ role: .Admin, name, .. } = u { greet(name) }
if x is Receipt { save(x) } // x сужен до Receiptdynamic Limits {
rps: u32 = DEFAULT_RPS
newSearch: Flag = Flag.off
}
let l = Limits.get()
if current > l.rps.get() { throttle() }
for await v in l.rps.changes() { limiter.set(v) }
if l.newSearch.on(for: ctx.caller) { newSearch(q) } else { oldSearch(q) }— 14.2 Динамическая конфигурация
Связанные диагностики
bad-init, missing-field, must-close, positional-literal, sealed-literal, fail-type, question-context, unhandled-error, type-mismatch, not-assignable, data-rights, missing-policy, unknown-policy-target