闭包作为输入参数是可能的,所以返回一个也应该是可能的。然而,闭合返回类型是有问题的,因为Rust目前只支持返回泛型(非通用)类型。匿名闭合类型是,根据定义,未知等返回闭合只能通过使它具体。这可以通过装箱来完成。
有效类型返回也比以前略有不同:
除此之外,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();
}