小编Sta*_*rov的帖子

如何将代码重写为新的未装箱的闭包

有人可以帮我用新的无盒装闭包重写这段代码:

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

    builder
}
Run Code Online (Sandbox Code Playgroud)

我试着像这样写,但我得到了一生的错误:

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,), ()> {
                                                                                   ^~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

我需要指定什么生命周期?沙盒中的简化示例.

rust rust-obsolete

9
推荐指数
1
解决办法
587
查看次数

可以使用特征类型的std :: rc :: Rc吗?

代码如下所示:

// Simplified
pub trait Field: Send + Sync + Clone {
    fn name(&self);
}

#[deriving(Clone)]
pub enum Select {
    SelectOnly(Vec<Rc<Field>>),
    SelectAll
}
Run Code Online (Sandbox Code Playgroud)

错误是:

the trait `core::kinds::Sized` is not implemented for the type `Field+'static`
Run Code Online (Sandbox Code Playgroud)

有没有其他方法让向量具有特征类型的引用计数不可变对象?

我想我可以像这样重写代码:

#[deriving(Clone)]
pub enum Select {
    SelectOnly(Vec<Rc<Box<Field>>>),
    SelectAll
}
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?

rust

5
推荐指数
1
解决办法
1512
查看次数

标签 统计

rust ×2

rust-obsolete ×1