英文:
Rust borrowing when adding to a reference?
问题
我不理解这个,
为什么编译器在 let co = 0; co += &1;
上报错,不能将 co
借用为可变的,
但在 let co = 0; co += 1;
上报错,不能两次赋值给不可变变量 co
?
为什么 co 被借用?
我期望 co 不被借用。
英文:
I don't understand this one,
why is the compiler error on let co = 0; co += &1;
cannot borrow co
as mutable
but errors on let co = 0; co += 1;
cannot assign twice to immutable variable co
?
why is co borrowed ?
I expect co to not be borrowed
答案1
得分: 1
两个示例显示了不同的错误消息,但在本质上并不有意思,因为它们都基于同样的基本原则出错:co
没有被标记为可变,所以你不能用 +=
进行改变。
后一个错误消息看起来更为特定,因此希望通过直接解决赋值的问题来更有帮助。前一个错误消息似乎更通用,即“无法借用 _ 为可变”,适用范围更广。
为什么
co
被借用?我期望co
不会被借用。
+=
的实现是通过 AddAssign
trait 完成的,它需要接受左侧作为可变引用以便进行修改。这就是为什么借用会发生,但错误当然指出了不可创建可变借用,因为 co
不是可变的。
英文:
Interesting that the two examples show such different error messages, but not meaningfully interesting since they both error-out on the same basic principle: co
is not marked as mutable, so you can't mutate it with +=
.
The latter error message looks more specialized and therefore hopes to be more helpful by directly addressing the problem of assignment. The former error message appears to be the more general "cannot borrow _ as mutable" which applies more widely.
> Why is co
borrowed? I expect co
to not be borrowed.
The implementation of +=
is done through the AddAssign
trait which needs to accept the left-hand side as a mutable reference in order to mutate it. That is why the borrow happens, but the error of course indicates that a mutable borrow cannot be created since co
is not mutable.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论