位置:首頁 > 高級語言 > Rust教學 > Rust作為輸出參數

Rust作為輸出參數

作為輸出參數

閉包作為輸入參數是可能的,所以返回一個也應該是可能的。然而,閉合返回類型是有問題的,因為Rust目前隻支持返回泛型(非通用)類型。匿名閉合類型是,根據定義,未知等返回閉合隻能通過使它具體。這可以通過裝箱來完成。

有效類型返回也比以前略有不同:

  • Fn: 通常
  • FnMut: 通常
  • FnBox: 相當於 FnOnce 但專門為這個應用程序,因為目前FnOnce(版本1.1.0)嚴重交互類型係統。

除此之外,move 關鍵字必須使用這標誌著捕獲值。這是必需的,因為通過引用任何捕獲會儘快丟棄,函數退出後在閉合內是無效的引用。
 

#![feature(fnbox)]

use std::boxed::FnBox;

// Return a closure taking no inputs and returning nothing
// which implements `FnBox` (capture by value).
fn create_fnbox() -> Box {
    let text = "FnBox".to_owned();

    Box::new(move || println!("This is a: {}", text))
}

fn create_fn() -> Box {
    let text = "Fn".to_owned();

    Box::new(move || println!("This is a: {}", text))
}

fn create_fnmut() -> Box {
    let text = "FnMut".to_owned();

    Box::new(move || println!("This is a: {}", text))
}

fn main() {
    let fn_plain = create_fn();
    let mut fn_mut = create_fnmut();
    let fn_box = create_fnbox();

    fn_plain();
    fn_mut();
    fn_box();
}

也可以看看:

BoxingFnFnMutFnBox, 和 泛型