【发布时间】:2014-06-19 21:14:12
【问题描述】:
编者注:此问题中的代码早于 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 作用域等有关,但我不确定我是否理解仅将方法调用移动到不同的行会产生什么影响。
【问题讨论】:
标签: rust borrow-checker rust-obsolete