有条件地借用Rust,同时将值保持在范围内

我有一个可以接受切片的 Rust 函数,但也有一个默认值。然后,如果用户通过None,我想生成一个默认值。但是,因为我期望的数据类型是切片,所以我必须借用该默认值,但它立即超出了范围。考虑到添加条件总是会引入一个新的范围,一旦结束,该范围就会删除该值,我如何有条件地创建一个拥有的值然后借用它?

fn with_default(foo: usize, bar: Option<&[usize]>) {
    let bar: &[usize] = match bar {
        Some(s) => s,
        None => { 
            let v: Vec<usize> = (0..foo).collect();
            &v
        }
    };
}
            &v
            ^^ borrowed value does not live long enough
        }
        ^ `v` dropped here while still borrowed
    let bar: &[usize] = match bar {
        ^^^ borrow later stored here

回答

受到Silvio Mayolo 的回答的启发,我意识到我可以Vec在顶级范围中声明,并且只能有条件地分配 + 借用它:

fn with_default(foo: usize, bar: Option<&[usize]>) {    
    let temp_vec: Vec<usize>;
    let bar: &[usize] = match bar {    
        Some(s) => s,    
        None => {                     
            temp_vec = (0..foo).collect(); 
            &temp_vec
        }   
    };
}

这是一个显示它按预期工作的操场链接:https : //play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=3bd817cf2ffa10c131445c19be16cbfe


以上是有条件地借用Rust,同时将值保持在范围内的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>