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

如何在Rust中将可变向量作为函数参数传递?,rust,mutable,Rust,Mutable,我正在执行一个评估Collatz猜想的小程序。作为这项工作的一部分,我有一个递归调用的函数,我想存储正在计算的当前数字,确定它是奇数还是偶数(如果它只是1,则终止),执行该猜想分支,然后用新数字调用自己 为此,我想将一个向量传递到这个函数中,并将当前的数字推到该向量上,但我很难理解如何传递可变向量引用 以下是我的代码: fn evaluate_conjecture(number_to_be_evaluated: u64, mut intermediate_results: &Vec<

我正在执行一个评估Collatz猜想的小程序。作为这项工作的一部分,我有一个递归调用的函数,我想存储正在计算的当前数字,确定它是奇数还是偶数(如果它只是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评估猜想(要评估的数量:u64,多个中间结果:&Vec)->u64{
中间结果。推送(要评估的数量);
如果要计算的数字=1{
0
}否则,如果要计算的数字%2==1{
让奇数步数结果=执行奇数猜想步数(要计算的数值);
求值猜想(奇数步结果、中间结果)+1
}否则{
让偶数步数结果=执行偶数猜想步数(要计算的数字);
评估猜想(偶数步结果、中间结果)+1
}
}
fn执行奇数猜想步骤(u:u64)->u64{
未执行!()
}
fn执行偶数猜想步骤(u:u64)->u64{
未执行!()
}
这是我的主要报告的相关部分

fn main() {
    let input_number = 42;
    let mut _intermediate_results: Vec<u64>;
    let number_of_steps = evaluate_conjecture(input_number, &_intermediate_results);
}
fn main(){
输入_数=42;
让mut_中间结果:Vec;
设步数=求值猜想(输入步数和中间结果);
}
这是我得到的错误

error[E0596]:不能将`*中间结果`借用为可变的,因为它位于`&`引用后面
-->src/main.rs:2:5
|
1 | fn评估猜想(要评估的数量:u64,多个中间结果:&Vec)->u64{
------------帮助:考虑把这个变成一个可变的参考:'MUTSTD::VEC::VEC '.
2 |中间结果。推送(要评估的数量);
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

如何将此向量传递到函数中,以便每次调用函数时都可以修改它?

&T
是一个不可变的引用

&mut T T
是一个可变的引用

将您的
&Vec
更改为
&mut-Vec
,将您的
&mut-intermediate\u结果更改为
&mut-intermediate\u结果


这是一个有很好的文档记录的东西;如果没有,我建议您阅读-它解释了很多。有一节专门介绍。

对不起,我已经阅读了参考指南和教程。这些参考中唯一的示例代码是将mut关键字作为函数参数,将mut关键字放在变量名,而不是类型。不,为了将可变变量作为在原型中也标记为mut的函数参数传递,在调用函数时还必须将mut关键字放在参数前面。我应该阅读其他文档吗?2019更新:参见