我有一个看起来像这样的结构:
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的类型不同.
最佳答案
你不能克隆闭包.能够为闭包实现Clone的唯一一个是编译器……而它没有.所以,你有点卡住了.
但是有一种解决方法:如果你有一个没有捕获变量的闭包,你可以通过不安全的代码强制复制.也就是说,在这一点上更简单的方法是接受fn(usize) – >相反,f64,因为它们没有捕获的环境(任何零大小的闭包可以重写为函数),并且是复制.
相关文章
转载注明原文:rust – 如何克隆闭包,使它们的类型相同? - 代码日志