kw let
Зарезервированное слово
Список слов: §1.4
Синтаксис
Stmt = ( "let" | "var" ) Pattern [ ":" Type ] "=" Expr | Const | Place AssignOp Expr
| "defer" Expr | Expr ;If = "if" ( Expr | "let" Pattern "=" Expr ) Block [ "else" ( If | Block ) ] ;While = [ Label ":" ] "while" ( Expr | "let" Pattern "=" Expr ) Block ;Грамматика: Прил. A
Определяется в
- 4.1 Переменные и константы — Изменяемых глобальных переменных без sync нет.
- 4.3 Конструирование и конструкторы — Литерал. T{ f1: e1, f2, ..base }
- 5.9 Выражения запросов — Форма: from x in источник (where e)\* (order by e (asc|desc)?, …)?
- 8.5 Структурная конкурентность — spawn допустим только лексически внутри scope { …
- 5.7 Лямбды и замыкания — .field и .method(args) в позиции аргумента — сокращение лямбды с одним параметром.
- 8.4 Цепочки — Цепочка связывает асинхронные шаги так, что выполняется либо вся цепочка, либо возвращается первая необработанная ошибка.
- 5.4 Условия — Тернарного оператора нет.
- 0.2 Нотация — Грамматика записана в EBNF (приложение A)
Примеры
let top = from o in db.Order
where o.userId == uid && o.total > MIN_TOTAL
order by o.createdAt desc
skip page * PAGE_SIZE
take PAGE_SIZE
load(items)
let names = from u in users where u.active select u.name // List в памяти
let byRole = from u in users group by u.role into g select (g.key, g.count())let (a, b) = scope {
let ha = spawn loadA()
let hb = spawn loadB()
(ha.join()?, hb.join()?)
}— 8.5 Структурная конкурентность
Связанные диагностики
global-mutable, mutate-immutable, bad-init, missing-field, must-close, positional-literal, sealed-literal, query-not-sql, spawn-outside-scope, it-outside-chain