Как передать изменяемый вектор в качестве параметра функции в Rust

Я пытаюсь изучить rust, и поэтому я реализую небольшую программу, которая просто оценивает гипотезу 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);

мой вопрос в том, как передать этот вектор в функцию, чтобы я мог изменять его каждый раз, когда функция называется

1 ответов


&T - это неизменяемая ссылка.

&mut T является изменяемой ссылкой.

изменить &Vec<uint> to &mut Vec<uint> и свой &_intermediate_results до &mut _intermediate_results.

это вещь, которая довольно хорошо документирована; я предлагаю вам прочитать документацию, если вы этого не сделали-это объясняет довольно много.