如何克隆一个闭包,使它们的类型相同?

Joh*_*ohn 3 closures rust

我有一个看起来像这样的结构:

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)

但这会导致mappermystruct.mapper.

操场

She*_*ter 5

从 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)