Closures 在FnMut上下文中如何使用装箱闭包?
如何在需要Closures 在FnMut上下文中如何使用装箱闭包?,closures,rust,Closures,Rust,如何在需要FnMut类型的上下文中使用装箱闭包,例如 pub fn main() { for n in (0..10).map(Box::new(|i| i * 2)) { println!("{}", n); } } 由于Box实现了该特性,您可以简单地解除对Boxed函数的限制: fn main() { let boxed_fn = Box::new(|i| i * 2); for n in (0..10).map(*boxed_fn) {
FnMut
类型的上下文中使用装箱闭包,例如
pub fn main() {
for n in (0..10).map(Box::new(|i| i * 2)) {
println!("{}", n);
}
}
由于
Box
实现了该特性,您可以简单地解除对Box
ed函数的限制:
fn main() {
let boxed_fn = Box::new(|i| i * 2);
for n in (0..10).map(*boxed_fn) {
println!("{}", n);
}
}
请注意,
Box
并没有实现FnMut
特性,但这是未来可能改进的特性。我感觉你问错了问题。您真正想解决的问题是什么?我想在结构中存储Map
或FlatMap
迭代器,并使用闭包作为参数。多亏了reddit,我现在才手动创建了一个实现FnMut
的结构,并将其用作map
的参数。这是否意味着map
表达式的类型现在很难表达?你说的“难以表达”是什么意思?我认为该类型不能以“封闭形式”编写,没有额外的通用参数,例如。当尝试存储迭代器时,这是有问题的。通常我的解决办法是用盒子封盖!取消引用此余文本中的框将使用它,并将已装箱的函数从框中移到迭代器中,因为map
按值获取其参数。因此,如果我想描述结果值的类型(例如,将其存储在结构中),我不能,因为闭包参数的类型不再是box
,它是不可测量类型
。