rust 为什么拥有i32所有权的函数需要它是可变的?

jtw3ybtb  于 2023-03-08  发布在  其他
关注(0)|答案(1)|浏览(144)

我有一个简单的算法,可以用欧几里得算法计算两个数的最大公约数。正如你所看到的,这个函数拥有两个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 {

我已经做了建议的修改,代码工作正常,但我仍然不明白为什么有必要这样做。你能告诉我我错过了什么吗?

but5z9lq

but5z9lq1#

你只能在一个可变绑定中改变变量,fn name(a: i32)a创建了一个不可变绑定,mut a是我们如何使它可变以允许改变的,对于let绑定也是如此:let a = 99;创建了一个不可变的变量,为了使它可变,我们使用let mut a = 99;

相关问题