Перенос вектора в функцию в Rust
Если параметр функции объявлен как вектор без ссылки, при передаче значение переходит к функции. Снаружи старое имя больше не владеет списком и не годится для дальнейшей работы.
Напишем функцию, которая принимает вектор целиком и печатает его длину:
fn eat(v: Vec<i32>) {
println!("{}", v.len());
}
fn main() {
let nums = vec![1, 2, 3];
eat(nums);
println!("done");
}
На экране сначала 3, затем слово
"done". После шага передачи имя
nums снаружи уже не связано со
списком. Обращение к нему не проходит
сборку:
let nums = vec![1, 2];
eat(nums);
println!("{}", nums.len());
Дан следующий код:
fn take(v: Vec<i32>) {
println!("{}", v[0]);
}
fn main() {
let data = vec![4, 5];
take(data);
println!("{}", data.len());
}
Скажите, соберется ли программа.
Допишите функцию take, которая
принимает вектор и печатает сумму
элементов, и передайте ей список
2, 3 из main.
Скажите, останется ли имя переменной
снаружи рабочим, если параметр функции
объявлен как Vec<i32> без ссылки.