我对Rust不太熟悉,对生命周期标志符的概念仍然有疑问。
我有一个引用的Vec
(或任何其他集合)。 现在我想用对新创建的本地变量的另一个引用替换特定引用。 现在的问题是,本地新变量的生命周期比向量短,这将使引用无效。
以下是试图实现我的示例代码,但会抛出编译时错误:
fn main() {
let values = ["one".to_string(), "lorem".to_string(), "three".to_string()];
let borrowed_values = vec![&values[0], &values[1], &values[2]];
println!("{:?}", do_the_impossible(borrowed_values));
}
fn do_the_impossible(mut data: Vec<&String>) -> Vec<&String> {
let replacement = "two".to_string();
data[1] = &replacement;
return data;
}
问题现在是:我如何创建与向量相同生命周期的新变量?
我想使用引用,因为克隆对象会非常昂贵。
我的初始想法是使用生命周期说明符,指示本地变量应与向量一样长寿。但我找不到语法正确的方式来做到这一点。是否有可能指定本地变量的生命周期?
如果不行,有没有其他方法可以避免克隆向量的元素? 我最后的选择将是使用 `Rc` 指针。
提前感谢!
String
是一种拥有str
的类型,但即使你有一个长度为一兆字节的String
,从函数中返回它只会最多复制 24 个字节(对于任何Vec
也是如此)。 - trent