有人可以帮我用新的无盒装闭包重写这段代码:
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)
我需要指定什么生命周期?沙盒中的简化示例.
代码如下所示:
// 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)
这是正确的方法吗?