此问题已经在这里有了答案:
我对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
借用和终生的概念对我来说仍然很新,很奇怪。请帮助我确定我错了。
错误消息在这里很清楚:
此函数的返回类型包含一个借用的值,但是签名没有说明它是从
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
}