Rust中变量被借用时能否为其赋值?
Rust中变量被借用时能否赋值?
不能,这是Rust借用规则强制约束的结果。
看你给出的报错代码:
fn main() { let mut a = 20; let b = &a; // 创建变量a的共享引用(不可变借用) a = 20; // 尝试修改被借用的a,触发编译错误 println!("{}, {}", a, b); }
Rust的借用检查器遵循核心规则:共享不可变,可变不共享。当你创建了&a这种共享引用后,只要该引用还处于有效作用域内(这里b的作用域直到println结束才终止),原变量a就被锁定为只读状态,不允许任何修改操作——这是为了保证所有共享引用都能访问到一致的、未被篡改的数据,从根源避免数据竞争问题。
如果需要修改a,必须先让之前的借用失效。比如通过缩小引用的作用域,让它在修改操作前就被销毁:
fn main() { let mut a = 20; { let b = &a; println!("{}", b); // 这里使用引用b } // 花括号结束,b的作用域终止,借用失效 a = 20; // 此时可以正常修改a println!("{}", a); }
简单来说,只要变量存在未失效的借用,就不能违反借用规则去修改它——共享借用存在时禁止修改,可变借用存在时禁止其他任何借用。
内容的提问来源于stack exchange,提问作者Ganesh11
相关产品推荐
相关产品推荐

