5.7 Лямбды и замыкания
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