Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Як вихідні параметри

Замикання як вхідні параметри можливі, тож повернення замикань як вихідних параметрів також має бути можливим. Однак анонімні типи замикань за означенням невідомі, тому для їхнього повернення ми маємо використовувати impl Trait.

Дійсні трейт-и для повернення замикання:

  • Fn
  • FnMut
  • FnOnce

Окрім цього, потрібно використовувати ключове слово 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.