Я все еще участвую в обучении Ржаву, и был удивлен следующим.
Я не мог понять, почему этот код компилируется:
use std::iter::AdditiveIterator;
fn main() {
let range = [1,2,3,4,5,6,7,8,9];
let sum = range.iter().map(|&x| x * x).filter(|&x| x % 2 == 0).sum();
println!("{}", sum);
}
Пока это не так: (просто перемещая .iter()
вверх)
use std::iter::AdditiveIterator;
fn main() {
let range = [1,2,3,4,5,6,7,8,9].iter();
let sum = range.map(|&x| x * x).filter(|&x| x % 2 == 0).sum();
println!("{}", sum);
}
Что делает эта ошибка:
test.rs:5:17: 5:36 error: borrowed value does not live long enough
test.rs:5 let range = [1,2,3,4,5,6,7,8,9].iter();
^~~~~~~~~~~~~~~~~~~
Я уверен, что это имеет какое-то отношение к областям Rust и т.д., но я не уверен, что понимаю, как просто перемещение вызова метода в другую строку имеет значение.