kw var
Зарезервированное слово
Список слов: §1.4
Синтаксис
Receiver = [ "var" | "move" | "static" ] ;ActorMember = { Attr } ( "var" Ident ":" Type "=" Expr | "dep" Ident ":" Type
| "msg" Ident "(" [ Params ] ")" [ "->" Type ] Block
| "on" ( "activate" | "passivate" ) Block ) ;AtomType = Path [ "<" TypeArgs ">" ] | "(" [ Type { "," Type } ] ")" | "[" Type [ ";" Expr ] "]"
| "&" [ "var" ] Type | "*" [ "var" ] Type | ( "frozen" | "sync" | "view" | "dyn" ) Type
| "fn" "(" [ Type { "," Type } ] ")" [ "->" Type ] [ Effects ] [ "escaping" ] | "never" ;Stmt = ( "let" | "var" ) Pattern [ ":" Type ] "=" Expr | Const | Place AssignOp Expr
| "defer" Expr | Expr ;Arg = [ Ident ":" ] Expr | "&" "var" Expr ;PatAlt = "_" | Literal | Literal ( ".." | "..=" ) Literal | [ "var" ] Ident [ "?" ]
| Type [ Ident ] | [ "." ] Path "(" [ Patterns ] ")" | Path "{" [ FieldPats ] [ ".." ] "}"
| "(" Patterns ")" | "[" [ Patterns ] [ ".." [ Ident ] ] "]" ;Грамматика: Прил. A
Определяется в
- 12.5 Шардированные акторы — Ключ объявляется в заголовке (sharded by имя
- 5.3 Перегрузка и пользовательские операторы — Перегрузка встроенных операторов — объявления op в impl
- 8.8 Локальные акторы — Сообщения обрабатываются строго по одному в порядке поступления от каждого отправителя.
- 4.3 Конструирование и конструкторы — Литерал. T{ f1: e1, f2, ..base }
- 4.5 impl и методы — Внутри метода доступны self и Self.
- 4.6 Интерфейсы — Интерфейсы структурные
- 5.1 Общие правила — Почти всё — выражения
- 6.7 Контракты — requires проверяется при входе, ensures — при выходе (result — возвращаемое значение, old(e) — значение e на входе), invariant (§4.2) — посл
Примеры
@idle(ACCOUNT_IDLE)
actor Account sharded by id: AccountId {
var balance: Money = Money.zero()
@transient var hits: u64 = 0
on activate { log.debug("account {id} up") }
msg deposit(x: Money) { balance += x }
msg balance() -> Money { balance }
}
Account(id).deposit(amount)impl Vec3 {
static op +(a: Vec3, b: Vec3) -> Vec3 => Vec3(a.x + b.x, a.y + b.y, a.z + b.z)
static op *(v: Vec3, k: f32) -> Vec3 => Vec3(v.x * k, v.y * k, v.z * k)
static op -(v: Vec3) -> Vec3 => v * -1.0
op [](i: usize) -> f32 { … } // чтение по индексу
var op [](i: usize) -> &var f32 { … } // запись по индексу
op ()(t: f32) -> Vec3 { … } // вызов как функции
static op <=>(a: Vec3, b: Vec3) -> Ordering { … }
op as Vec4 => Vec4(x, y, z, 1.0)
}— 5.3 Перегрузка и пользовательские операторы
Связанные диагностики
actor-not-hosted, not-callable, not-overloadable, operator-decl, range-not-iterable, actor-cycle, bad-init, missing-field, must-close, positional-literal, sealed-literal, impl-foreign-type, unknown-method, explicit-interface