请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

for循环导致生命周期不足或无效引用(invalid cast)

for item in params_vec.iter(){
ps.push(&item as Parameter);
}

搞这个 item 好久了,一直报错,请教老师一下到底该怎么处理这个情况

正在回答 回答被采纳积分+3

1回答

叶枭 2022-01-28 23:34:48

.iter() 返回的是 &T 的迭代, 因此可以直接用 ps.push(item), 例如

fn main() {
    let args: Vec<String> = std::env::args().collect();

    let mut ps = vec![];
    for item in args.iter() {
        ps.push(item);
    }
}


0 回复 有任何疑惑可以回复我~
  • 提问者 幕布斯1124430 #1
    老师那你看这个例子的问题怎么处理:
    
    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
    回复 有任何疑惑可以回复我~ 2022-01-29 03:49:52
  • 叶枭 回复 提问者 幕布斯1124430 #2
    这个问题你分析下生命周期范围会比较清楚, 变量 i 的生命周期范围是在 `for item in loop_vec.iter(){ }` 之间, 而代码却希望将 i 变量的引用带到 main 函数的范围内(ps 变量).
    
    修改方法就是将 ps 的类型定义为 `Vec<i32>`
    回复 有任何疑惑可以回复我~ 2022-02-01 18:12:37
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信