rust:预期寿命参数问题[重复]

问题描述 投票:0回答:1

我对Rust并不陌生,他正在制作一个简单的程序来练习,它需要2个数字并在它们之间打印数字。这是我的代码

fn main() {
    let a: u32 = 2;
    let b: u32 = 10;
    let a = result(&a, &b);
    println!("{:?}", a);
}

fn result(a: &u32, b: &u32) -> [Vec<&u32>] {
    let mut vec = Vec::new();
    for x in a..b {
        vec.push(a);
    }
    vec
}

当我运行此程序时,出现此错误

fn result(a: &u32, b: &u32) -> [Vec<&u32>] {
|                                     ^ expected lifetime parameter

借用和终生的概念对我来说仍然很新,很奇怪。请帮助我确定我错了。

rust
1个回答
1
投票

错误消息在这里很清楚:

此函数的返回类型包含一个借用的值,但是签名没有说明它是从a还是从b借用的

提供明确的生存期将有助于编译器了解您要执行的操作:

fn result<'a>(a: &'a u32, b: &'a u32) -> Vec<&'a u32> {
    let mut vec: Vec<&'a u32> = Vec::new();
    for x in *a..*b {
        vec.push(&x);
    }
    vec
}

但是上面的方法也不起作用,因为借用x导致借用仅在一次迭代中才存在的变量:

 vec.push(&x);
           ^^ borrowed value does not live long enough

您可能想要避免完全借用:

fn result(a: u32, b: u32) -> Vec<u32> {
    let mut vec = Vec::new();
    for x in a..b {
        vec.push(x);
    }
    vec
}

live example on godbolt.org

© www.soinside.com 2019 - 2024. All rights reserved.