生命周期问题

来源:4-6 使用for_range进行迭代

幕布斯1124430

2022-01-30

老师那你看这个例子的问题怎么处理:

let mut ps:Vec<&i32> = vec![];

let mut loop_vec = [1,2,3,4,5,6];

for item in loop_vec.iter(){
        let i = item + 1; ps.push(&i);
}

报错信息:ps.push(&i); &i borrowed value does not live long enough `i` dropped here while still borrowed

写回答

1回答

叶枭

2022-02-01

这个问题你分析下生命周期范围会比较清楚, 变量 i 的生命周期范围是在 `for item in loop_vec.iter(){ }` 之间, 而代码却希望将 i 变量的引用带到 main 函数的范围内(ps 变量).

修改方法就是将 ps 的类型定义为 `Vec<i32>`

1
0

轻松实现Rust系统入门,实战编译器开发

入门者的平缓学习曲线,聚焦Rust核心重难点,获得实际应用能力

442 学习 · 45 问题

查看课程