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

时间:2014-08-15 13:57:22

标签: rust mutable

我正在努力学习生锈,所以我正在实施一个只评估Collat​​z猜想的小程序。作为这个的一部分,我有一个函数,我递归调用,我想存储正在评估的当前数字,确定它是奇数还是偶数(或如果它只是一个1终止),执行猜想的那个分支然后用新号码打电话给自己。要做到这一点,我想将一个向量传递给这个函数并将当前数字推送到该向量上,但我很难理解如何传递一个可变向量引用。

以下是我的代码:

   fn evaluate_conjecture(number_to_be_evaluated: uint, mut intermediate_results: &Vec<uint>) -> uint
   {
       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
       }
   }

这是我主要的相关部分

let mut _intermediate_results: Vec<uint>;

let number_of_steps = evaluate_conjecture(input_number,  &_intermediate_results);

这是我得到的错误

Collatz.rs:5:5: 5:25 error: cannot borrow immutable dereference of `&`-pointer `*intermediate_results` as mutable
Collatz.rs:5     intermediate_results.push(number_to_be_evaluated);

我的问题是,如何将此向量传递给函数,以便每次调用函数时都可以对其进行修改

1 个答案:

答案 0 :(得分:10)

&T是一个不可变的引用。

&mut T是一个可变参考。

将您的&Vec<uint>更改为&mut Vec<uint>,将&_intermediate_results更改为&mut _intermediate_results

这是一个相当完整的文件;我建议你阅读文档,如果你没有 - 它解释了很多。