如何使一个结构接受类型`impl std :: ops :: Fn <()>作为其字段?

时间:2018-10-20 03:27:49

标签: rust

在Rust 1.26中,名为impl Trait的新功能已稳定,这使函数能够返回未装箱的闭包。但是如何为未装箱的闭包定义结构字段的类型,下面的代码无法编译:

fn return_closure() -> impl Fn() -> () {
    move || {
        println!("abc");
    }
}

struct HoldClosure {
    closure: impl Fn() -> ()
}

fn main() {    
    let hold_my_closure = HoldClosure {
        closure: return_closure()
    };
}

1 个答案:

答案 0 :(得分:1)

只需使用泛型类型参数即可。

fn return_closure() -> impl Fn() {
    move || {
        println!("abc");
    }
}

struct HoldClosure<F: Fn()> {
    closure: F,
}

fn main() {    
    let hold_my_closure = HoldClosure {
        closure: return_closure()
    };

    (hold_my_closure.closure)();
}