簡體   English   中英

如何在Rust中將可變向量作為函數參數傳遞?

[英]How do I pass a mutable vector as a function parameter in Rust?

我正在實施一個評估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

這是一個相當完整的文件; 如果你沒有,我建議你閱讀文檔 - 它解釋了很多。 有一節特別關於可變引用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM