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, FnFnMutFnBox, 和 泛型