我正在努力学习生锈,所以我正在实施一个只评估Collatz猜想的小程序。作为这个的一部分,我有一个函数,我递归调用,我想存储正在评估的当前数字,确定它是奇数还是偶数(或如果它只是一个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);
我的问题是,如何将此向量传递给函数,以便每次调用函数时都可以对其进行修改
答案 0 :(得分:10)
&T
是一个不可变的引用。
&mut T
是一个可变参考。
将您的&Vec<uint>
更改为&mut Vec<uint>
,将&_intermediate_results
更改为&mut _intermediate_results
。
这是一个相当完整的文件;我建议你阅读文档,如果你没有 - 它解释了很多。