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

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

pub struct MyStruct<F> where F: Fn(usize) -> f64 {
    field: usize,
    mapper: F,
    // fields omitted
}

如何为此结构实现Clone?

我发现可以复制函数体的一种方法是:

let mapper = |x| (mystruct.mapper)(x);

但这会导致mapper的类型与mystruct.mapper的类型不同.

playpen link

最佳答案
你不能克隆闭包.能够为闭包实现Clone的唯一一个是编译器……而它没有.所以,你有点卡住了.

但是有一种解决方法:如果你有一个没有捕获变量的闭包,你可以通过不安全的代码强制复制.也就是说,在这一点上更简单的方法是接受fn(usize) – >相反,f64,因为它们没有捕获的环境(任何零大小的闭包可以重写为函数),并且是复制.

转载注明原文:rust – 如何克隆闭包,使它们的类型相同? - 代码日志