编者注:这个问题中的代码早于 Rust 1.0。此代码的等效现代版本按原样编译。
我仍然在学习 Rust 的小步骤,并对以下内容感到惊讶。
我不明白为什么这段代码会编译:
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 作用域等有关,但我不确定我是否理解将方法调用移动到不同的行会产生什么影响。