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(); }
也可以看看:
Boxing, Fn, FnMut, FnBox, 和 泛型