number_list
представляет собой список целых чисел, а целые числа реализуют черту Copy
, что означает, что они никогда не перемещаются, а копируются вместо этого. По этой причине массив сохраняет владение своими элементами, и largest
и number
получают копии этих элементов.
Если вы попытаетесь сделать то же самое с типом, не связанным с копией, то вы получите ошибку:
struct WrappedInt(i32);
fn main() {
let number_list = vec![34, 50, 25, 100, 65]
.into_iter()
.map(|x| WrappedInt(x))
.collect::<Vec<_>>();
let mut largest = number_list[0];
for number in number_list {
if number.0 > largest.0 {
largest = number;
}
}
println!("The largest number is {}", largest.0);
assert_eq!(largest.0, 100);
}
детская площадка
дает:
error[E0507]: cannot move out of index of `std::vec::Vec<WrappedInt>`
--> src/main.rs:9:23
|
9 | let mut largest = number_list[0];
| ^^^^^^^^^^^^^^
| |
| move occurs because value has type `WrappedInt`, which does not implement the `Copy` trait
| help: consider borrowing here: `&number_list[0]`