Як вихідні параметри
Замикання як вхідні параметри можливі, тож повернення замикань як
вихідних параметрів також має бути можливим. Однак анонімні
типи замикань за означенням невідомі, тому для їхнього повернення ми маємо
використовувати impl Trait.
Дійсні трейт-и для повернення замикання:
FnFnMutFnOnce
Окрім цього, потрібно використовувати ключове слово move, яке сигналізує, що всі захоплення
відбуваються за значенням. Це потрібно, тому що будь-які захоплення за посиланням були б
звільнені щойно функція завершилася б, залишаючи недійсні посилання
в замиканні.
fn create_fn() -> impl Fn() {
let text = "Fn".to_owned();
move || println!("This is a: {}", text)
}
fn create_fnmut() -> impl FnMut() {
let text = "FnMut".to_owned();
move || println!("This is a: {}", text)
}
fn create_fnonce() -> impl FnOnce() {
let text = "FnOnce".to_owned();
move || println!("This is a: {}", text)
}
fn main() {
let fn_plain = create_fn();
let mut fn_mut = create_fnmut();
let fn_once = create_fnonce();
fn_plain();
fn_mut();
fn_once();
}
Дивіться також:
Fn, FnMut, Узагальнені та impl Trait.