我有一个简单的算法,可以用欧几里得算法计算两个数的最大公约数。正如你所看到的,这个函数拥有两个i32,并返回一个i32。我对借位检查器的理解是,当i32实现copy时,这段代码应该没问题。但是,编译器告诉我,我需要声明变量是可变的。
fn euclid_gcd(a: i32, b: i32) -> i32 {
while a != b {
if a > b {
a = a - b
}
else {
b = b - a
}
}
a
}
-->
fn euclid_gcd(mut a: i32, mut b: i32) -> i32 {
我已经做了建议的修改,代码工作正常,但我仍然不明白为什么有必要这样做。你能告诉我我错过了什么吗?
1条答案
按热度按时间but5z9lq1#
你只能在一个可变绑定中改变变量,
fn name(a: i32)
为a
创建了一个不可变绑定,mut a
是我们如何使它可变以允许改变的,对于let绑定也是如此:let a = 99;
创建了一个不可变的变量,为了使它可变,我们使用let mut a = 99;