我有一个看起来像这样的结构:
pub struct MyStruct<F>
where
F: Fn(usize) -> f64,
{
field: usize,
mapper: F,
// fields omitted
}
Run Code Online (Sandbox Code Playgroud)
我如何实现Clone这个结构?
我发现复制函数体的一种方法是:
let mapper = |x| (mystruct.mapper)(x);
Run Code Online (Sandbox Code Playgroud)
但这会导致mapper与mystruct.mapper.
从 Rust 1.26.0 开始,闭包实现了两者Copy并且Clone如果所有捕获的变量都实现了:
#[derive(Clone)]
pub struct MyStruct<F>
where
F: Fn(usize) -> f64,
{
field: usize,
mapper: F,
}
fn main() {
let f = MyStruct {
field: 34,
mapper: |x| x as f64,
};
let g = f.clone();
println!("{}", (g.mapper)(3));
}
Run Code Online (Sandbox Code Playgroud)