Как передать изменяемый вектор в качестве параметра функции в 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
.
это вещь, которая довольно хорошо документирована; я предлагаю вам прочитать документацию, если вы этого не сделали-это объясняет довольно много.