fn main() {
let numbers: Vec<i32> = vec![1, 2, 3, 4, 5];
let squared_numbers: Vec<i32> = numbers.iter()
.map(|&num| num * num)
.collect();
println!("{:?}", squared_numbers);
}
迭代器方法执行逻辑解释
iter()
: 调用numbers.iter()
方法将Vec<i32>
转换为一个迭代器。这个迭代器可以按顺序逐个产生Vec
中的元素。这里产生的迭代器元素类型是&i32
,因为iter()
方法返回的是一个不可变借用的迭代器。
map(|&num| num * num)
: map
方法会对迭代器中的每个元素应用一个闭包。这里闭包|&num| num * num
接受一个i32
类型的元素(因为使用了&
解引用模式,将&i32
转换为i32
),并返回该元素的平方。map
方法返回一个新的迭代器,这个新迭代器中的元素是应用闭包后的结果,类型为i32
。
collect()
: collect
方法用于将迭代器收集成一个集合。在这里,它将经过map
处理后的迭代器收集成一个新的Vec<i32>
,即平方后的数字组成的向量
。