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

Ama*_*ani 1 rust

使用关键字声明和初始化可变变量mut,但是当它在下一行代码中使用时,mut必须重复关键字;

let mut guess = String::new();

io::stdin()
    .read_line(&mut guess)
    .expect("Failed to read line");
Run Code Online (Sandbox Code Playgroud)

我的期望是,一旦变量被声明并初始化为可变,它仍然是如此.这是一种语法糖还是有特定的原因?

我希望上面的代码是这样的:

let mut guess = String::new();

io::stdin()
    .read_line(&guess)
    .expect("Failed to read line");
Run Code Online (Sandbox Code Playgroud)

请注意,我mut在调用中省略了关键字read_line.

She*_*ter 5

我强烈建议您回过头来阅读第二版The Rust Programming Language,特别是有关参考和借阅的部分.

有两种类型的引用:immutable和mutable.即使变量可能被变异,您也可以选择获取它的不可变引用.你通过说&foo或做出这个选择&mut foo.

此功能对于允许您遵守引用规则非常重要:

  1. 在任何给定的时间,你可以有以下两种:
    • 一个可变的参考.
    • 任意数量的不可变引用.

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