为什么我需要第二次重复写“mut”?

时间:2017-09-19 02:02:32

标签: rust

使用关键字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关键字。

1 个答案:

答案 0 :(得分:5)

我强烈建议您返回并重新阅读The Rust Programming Language, second edition,特别是有关references and borrowing的部分。

有两种类型的引用:immutable和mutable。即使变量可能变异,您也可以选择获取它的不可变引用。您可以通过&foo&mut foo

来做出此选择

此功能对于您遵守rules of references

非常重要
  
      
  1. 在任何时候,你可以有以下两种:      
        
    • 一个可变的参考文献。
    •   
    • 任意数量的不可变引用。
    •   
  2.   

由于BufRead::read_line需要对String的可变引用,您需要说&mut guess