op =
=
Определяется в
- 5.2 Приоритет и ассоциативность — Приоритет и ассоциативность
- 5.3 Перегрузка и пользовательские операторы — Перегрузка встроенных операторов — объявления op в impl
- 1.6 Операторы и разделители — + - * / % ** +% -% % +| -| | & | ^ ~ << >> && || !
- 5.7 Лямбды и замыкания — .field и .method(args) в позиции аргумента — сокращение лямбды с одним параметром.
- 3.6 Псевдонимы, новые и уточнённые типы — distinct T создаёт новый номинальный тип с представлением T.
Примеры
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 Перегрузка и пользовательские операторы
let inc = x => x + 1
let add = (a: i32, b: i32) => a + b
users.map(.name) // = u => u.name
users.filter(.isActive()) // = u => u.isActive()
retryWith(3) { fetch() } // замыкание последним аргументом
cluster.lock("k", ttl: LOCK_TTL) { migrate() }Связанные диагностики
chained-comparison, not-callable, not-overloadable, operator-decl, range-not-iterable, invalid-char, refinement-violated