Rust 如何将代码重写为新的未绑定闭包

Rust 如何将代码重写为新的未绑定闭包,rust,rust-obsolete,Rust,Rust Obsolete,有人能帮我用新的未装箱闭包重写这段代码吗 struct Builder; pub fn build(rules: |params: &mut Builder|) -> Builder { let mut builder = Builder::new(); rules(&mut builder); builder } 我试着这样写,但我犯了一个终身错误: pub fn build<F>(rules: F) -> Builder w

有人能帮我用新的未装箱闭包重写这段代码吗

struct Builder;
pub fn build(rules: |params: &mut Builder|) -> Builder {
    let mut builder = Builder::new();
    rules(&mut builder);

    builder
}
我试着这样写,但我犯了一个终身错误:

pub fn build<F>(rules: F) -> Builder where F: FnOnce<(&mut Builder,), ()> {
    let mut builder = Builder::new();
    rules(&mut builder);

    builder
}

valico/src/builder.rs:48:59: 48:71 error: missing lifetime specifier [E0106]
valico/src/builder.rs:48     pub fn build<F>(rules: F) -> Builder where F: FnOnce<(&mut Builder,), ()> {
                                                                                   ^~~~~~~~~~~~
pub-fn-build(规则:F)->Builder其中F:fn一次{
让mut builder=builder::new();
规则(&mut生成器);
建设者
}
valico/src/builder.rs:48:59:48:71错误:缺少生存期说明符[E0106]
valico/src/builder.rs:48 pub-fn-build(规则:F)->builder,其中F:FnOnce{
^~~~~~~~~~~~
我需要指定什么生存期?

这需要更高的秩生存期。完整的非累加语法是
F:for

在函数上使用生存期无法工作,例如,如果

pub fn build<'b, F>(rules: F) -> Builder where F: FnOnce<(&'b mut Builder,), ()>

投票人:为什么这是个离题话题?
pub fn initialize_with_closure<F>(rules: F) -> uint where F: FnOnce(&mut uint) {
    let mut i = 0;
    rules(&mut i);

    i
}

// equivalently
pub fn initialize_with_closure_explicit<F>(rules: F) -> uint where F: for<'a> FnOnce(&'a mut uint) -> () {
    let mut i = 0;
    rules(&mut i);

    i
}

pub fn main() {
    initialize_with_closure(|i: &mut uint| *i = *i + 20);
    initialize_with_closure_explicit(|i: &mut uint| *i = *i + 20);
}