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

5.7 Лямбды и замыкания

oxl
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() }
  • .field и .method(args) в позиции аргумента — сокращение лямбды с одним параметром.
  • Замыкание последним аргументом: если последний параметр функции имеет тип функции, блок после вызова передаётся как этот аргумент: f(a) { … } или с параметрами f(a) { x => … }.
  • Захват: незаходящее (не сохраняется и не передаётся в другую задачу) замыкание захватывает по ссылке; уходящее — перемещением. move x => … — явное перемещение. Компилятор определяет «уходящее» по типу параметра: fn(…) escaping или передача в spawn.

См. также

Исходник: docs/spec/oxl-standard.md