【发布时间】:2021-11-10 21:29:01
【问题描述】:
我需要一个我声明的闭包向量,但由于编译错误,我无法使用该向量的项。
不能将
**h借用为可变的,因为它位于&引用的后面
是否可以在没有动态内存分配的情况下使代码正常工作? 为什么 h 被借用为可变的?
fn main() {
let hh: Vec<&dyn FnMut(&mut i32)> = vec![&|i: &mut i32| {
*i = 10;
}];
let mut i = 0;
let h = &hh[0];
h(&mut i); // <-- cannot borrow `**h` as mutable, as it is behind a `&` reference
println!("{}", i);
}
我已经使上面的示例有效,但在这种情况下,我需要为每个看起来过多的项目声明变量
fn main() {
let mut item = |i: &mut i32| {
*i = 10;
};
let mut hh: Vec<&mut dyn FnMut(&mut i32)> = vec![&mut item];
let mut i = 0;
let h = &mut hh[0];
h(&mut i);
println!("{}", i);
}
有没有优雅的解决方案?
【问题讨论】:
-
如果您使用
Fn而不是FnMut,您的代码将编译。调用FnMut闭包需要对闭包的可变引用。
标签: rust