使用关键字mut
声明和初始化可变变量,但是当它在下一行代码中使用时,必须重复关键字mut
;
let mut guess = String::new();
io::stdin()
.read_line(&mut guess)
.expect("Failed to read line");
我的期望是,一旦变量被声明并初始化为可变,它仍然是如此。这是一种语法糖还是有特定的原因?
我希望上面的代码是这样的:
let mut guess = String::new();
io::stdin()
.read_line(&guess)
.expect("Failed to read line");
请注意,我在mut
的调用中省略了read_line
关键字。
答案 0 :(得分:5)
我强烈建议您返回并重新阅读The Rust Programming Language, second edition,特别是有关references and borrowing的部分。
有两种类型的引用:immutable和mutable。即使变量可能变异,您也可以选择获取它的不可变引用。您可以通过&foo
或&mut foo
。
此功能对于您遵守rules of references:
非常重要
- 在任何时候,你可以有以下两种:
醇>
- 一个可变的参考文献。
- 任意数量的不可变引用。
由于BufRead::read_line
需要对String
的可变引用,您需要说&mut guess
。