rust - 如何在 Rust 中将可变向量作为函数参数传递?

标签 rust mutable

我正在实现一个评估 Collat​​z 猜想的小程序。作为其中的一部分,我有一个递归调用的函数,我想存储当前正在评估的数字,确定它是奇数还是偶数(或者如果它只是 1 则终止),执行猜想的那个分支然后用新号码给自己打电话。

为此,我想将一个向量传递给该函数并将当前数字压入该向量,但我很难理解如何传递可变向量引用。

这是我的代码:

fn evaluate_conjecture(number_to_be_evaluated: u64, mut intermediate_results: &Vec<u64>) -> u64 {
    intermediate_results.push(number_to_be_evaluated);

    if number_to_be_evaluated == 1 {
        0
    } else if number_to_be_evaluated % 2 == 1 {
        let odd_step_result = perform_odd_conjecture_step(number_to_be_evaluated);
        evaluate_conjecture(odd_step_result, intermediate_results) + 1
    } else {
        let even_step_result = perform_even_conjecture_step(number_to_be_evaluated);
        evaluate_conjecture(even_step_result, intermediate_results) + 1
    }
}

fn perform_odd_conjecture_step(_: u64) -> u64 {
    unimplemented!()
}

fn perform_even_conjecture_step(_: u64) -> u64 {
    unimplemented!()
}

这是我主要的相关部分

fn main() {
    let input_number = 42;
    let mut _intermediate_results: Vec<u64>;
    let number_of_steps = evaluate_conjecture(input_number, &_intermediate_results);
}

这是我得到的错误

error[E0596]: cannot borrow `*intermediate_results` as mutable, as it is behind a `&` reference
 --> src/main.rs:2:5
  |
1 | fn evaluate_conjecture(number_to_be_evaluated: u64, mut intermediate_results: &Vec<u64>) -> u64 {
  |                                                                               --------- help: consider changing this to be a mutable reference: `&mut std::vec::Vec<u64>`
2 |     intermediate_results.push(number_to_be_evaluated);
  |     ^^^^^^^^^^^^^^^^^^^^ `intermediate_results` is a `&` reference, so the data it refers to cannot be borrowed as mutable

如何将这个向量传递给函数,以便每次调用函数时都可以修改它?

最佳答案

&T是不可变引用。

&mut T是可变引用。

更改您的 &Vec<u64>&mut Vec<u64>和你的 &_intermediate_results&mut _intermediate_results .

这是一个有据可查的事情;我建议你阅读 the documentation如果你还没有——它解释了很多。有一节专门关于 mutable references .

关于rust - 如何在 Rust 中将可变向量作为函数参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25327750/

相关文章:

rust - 如何在实现特征时避免函数名冲突?

rust - 如何在HashMap中获取值以相互引用?

rust - 解构一个值以访问属性或使用它们的名称哪个更好?

generics - 具有泛型的特征的语法

c++ - 可变关键字和线程安全

python - PIL 图像对象是否可变?

rust - 如何在不克隆的情况下对 Vec<(Cow<str>, Cow<str>) by_key 进行排序?

c++ - 是否有语法来防止类的实例是常量?

arrays - Haskell 实时更新和查找性能

constants - D 中的逻辑常量