我正在尝试用 Rust 实现动态编程问题,以熟悉该语言。与许多动态规划问题一样,这使用记忆来减少运行时间。不幸的是,我的第一次解决方案产生了错误。我已将代码精简为以下内容。警告 - 现在有点荒谬:
use std::collections::HashMap;
fn repro<'m>(memo: &'m mut HashMap<i32, Vec<i32>>) -> Option<&'m Vec<i32>> {
{
let script_a = repro(memo);
let script_b = repro(memo);
}
memo.get(&0)
}
fn main() {}
编译错误是:
error[E0499]: cannot borrow `*memo` as mutable more than once at a time
--> src/main.rs:6:30
|
5 | let script_a = repro(memo);
| ---- first mutable borrow occurs here
6 | let script_b = repro(memo);
| ^^^^ second mutable borrow occurs here
7 | }
| - first borrow ends here
为什么是变量memo
多次借用?在我看来,计算时应该借一次script_a
,然后借用结束,然后再次借用script_b
.
目前最后借用的是它们定义的块(#9113如果实施可能会改变这一点)
问题是 script_a (保存对映射的不可变引用)对整个块有效,并且您尝试使用对同一映射的可变引用:
let script_a = repro(memo);
let script_b = repro(memo);
// script_a is still alive
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)