我使用Rayons par_iter()
来迭代我需要运行的昂贵方法的不同变体。这些运行需要访问相同的已检查大小集,因为它们都需要不时地添加和检查它。我还需要在第一个线程完成时关闭它们,这就是为什么我有一个kill_switch,当它设置为true时,它将强制迭代退出。
let mut checked: HashSet<usize> = HashSet::new();
let mut kill_switch: bool = false;
permutations.par_iter().for_each(|order| {
let board = Board::new(board_map.clone(), order.clone());
let mut bubbles: Vec<(i8, i8)> = Vec::new();
if let Some(bubbles) = board.solve(&mut bubbles, &mut checked, &kill_switch) {
kill_switch = true;
bubbles.into_iter().for_each(|bubble| {
dbg!(bubble);
});
}
})
这是我目前的代码,但是我在使用checked和kill_switch时出现错误。我该如何处理这些错误?
错误:
- 无法借用
checked
作为可变变量,因为它是Fn
闭包中捕获的变量无法借用为可变变量[E0596] - 无法分配给
kill_switch
,因为它是Fn
闭包中捕获的变量,无法分配[E0594]
1条答案
按热度按时间6pp0gazn1#
要修复这些错误,需要使用RefCells Package checked和kill_switch变量,并使用borrow_mut方法在闭包中获取对它们的可变引用。
下面是如何修改代码的示例:
请注意,您还需要将RefCell作为依赖项添加到项目中。