Параметр-вектор функции в Rust
Давайте теперь будем передавать вектор в функцию по значению. Если параметр объявлен как вектор без ссылки, значение переносится внутрь блока. После вызова исходная переменная снаружи уже не владеет списком.
Посчитаем сумму внутри блока, который забирает список:
fn func(v: Vec<i32>) -> i32 {
let mut total = 0;
for n in v {
total += n;
}
total
}
fn main() {
let nums = vec![1, 2, 3];
let s = func(nums);
println!("{}", s);
}
На экране 6. Переменная nums после передачи больше
не доступна для чтения.
Такой прием уместен, когда список больше не нужен снаружи:
fn show(v: Vec<i32>) {
println!("{}", v.len());
}
fn main() {
let data = vec![4, 5];
show(data);
}
Дан вектор:
let items = vec![10, 20];
Напишите блок, который забирает список и печатает первый элемент.
Запустите его и скажите, можно ли после этого снова прочитать
items.
Дан следующий код:
fn func(v: Vec<i32>) -> i32 {
v.len() as i32
}
В точке входа передайте vec![1, 2, 3] и выведите длину.
Скажите, что происходит с владением при параметре без амперсанда.