1 回答
TA贡献1864条经验 获得超6个赞
这行:
n.set(n.get() + 1);
被减为
Number::set(&mut n, n.get() + 1);
现在,错误消息可能会更加清楚:
error[E0502]: cannot borrow `n` as immutable because it is also borrowed as mutable
--> <anon>:18:25
|
18 | Number::set(&mut n, n.get() + 1);
| - ^ - mutable borrow ends here
| | |
| | immutable borrow occurs here
| mutable borrow occurs here
当Rust从左到右评估参数时,该代码与此等效:
let arg1 = &mut n;
let arg2 = n.get() + 1;
Number::set(arg1, arg2);
现在应该很明显出了什么问题。交换前两行即可解决此问题,但Rust不会进行这种控制流分析。
它最初是作为Bug#6268创建的,现在已集成到RFC 2094(非词法生存期)中。如果您使用Rust 2018,则会自动启用NLL,并且您的代码现在将编译而不会出现错误。
- 1 回答
- 0 关注
- 829 浏览
添加回答
举报