Era*_*dan 12 rust borrow-checker rust-obsolete
编者注:此问题中的代码早于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);
}
Run Code Online (Sandbox Code Playgroud)
虽然这不是:(只是向上移动.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);
}
Run Code Online (Sandbox Code Playgroud)
这会导致此错误:
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();
^~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
我确定它与Rust作用域等有关,但是我不确定我是如何通过将方法调用移动到另一行来产生影响的.
c-s*_*ile 10
数组在let range = [1,2,3,4,5,6,7,8,9].iter();语句结束时被销毁,因为没有包含该向量的变量.这会导致悬浮的迭代器无处可寻.
在C++中也是如此,可以在之后删除的对象上创建迭代器.
| 归档时间: |
|
| 查看次数: |
2349 次 |
| 最近记录: |