Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Closures 在FnMut上下文中如何使用装箱闭包?_Closures_Rust - Fatal编程技术网

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
,它是
不可测量类型