我正要用锈书来学习锈。我了解的是,我无法分配未声明为mut的变量。所以我想知道为什么此代码有效:
extern crate num_bigint;
use num_bigint::BigUint;
fn main() {
let n = 10_000;
println!("{}! = {};", n, factorial_recursive(n));
}
fn factorial_recursive(n: usize) -> BigUint {
let result: BigUint;
if n == 0 { result = BigUint::new(vec![1]); }
else { result = factorial_recursive(n-1) * n; }
result
}
在一开始,我已经声明了结果mut,但是我得到了一个编译器警告,即mut是不必要的。因此,我删除了它,但感到惊讶的是它仍然有效。 为什么会这样?
PS:我知道,我可以直接从if / else分支返回。我一开始就有这个,但是想在返回之前打印出结果,所以我改变了这个,并得到了关于mut的编译器警告。现在,我想了解这一点。