Rust似乎是一种很优秀的语言-我应该知道与编译器的斗争是代价。我试图为一个结构体创建一个构造函数,但是我得到了“does not live long enough”错误。
简化到最基本,我有:
所以,我这样做是因为那个向量
问题是,我知道哪里出了问题。在
另外,如果有人对如何一般性地从函数中返回引用有什么建议,我会很高兴听到他们的意见。 编辑 这与仅仅传递对象的所有权不同;我不能这样做,因为向量需要引用而不是堆栈中的对象。Simon 的答案可能是我要找的 - 我已经忘记我可以将东西包装起来。
简化到最基本,我有:
fn main() {
println!("RUST PLEASE");
}
struct Help<'a> {
list: Vec<&'a Traits>
}
impl<'a> Help<'a> {
fn new() -> Help<'a> {
Help { list: vec![&Test] }
}
}
trait Traits {
fn mice(&self);
}
struct Test;
impl Traits for Test {
fn mice(&self) { print!("WHY"); }
}
所以,我这样做是因为那个向量
list
应该保存一个实现提供的 trait 的任何类的异构列表。据我所知,这意味着我必须使用引用,以便向量具有实际大小可用。由于它是引用,生命周期必须存在,以确保它们一起生存和死亡。问题是,我知道哪里出了问题。在
new
中,那个 Test
属于 new
作用域,我试图将其引用传递到函数的上方和外部。如果我这样做,Test
就会超出作用域,引用就会失效。那我该怎么办?如何让对象持续 Help
的生命时间?毕竟,没有人真正拥有它。另外,如果有人对如何一般性地从函数中返回引用有什么建议,我会很高兴听到他们的意见。 编辑 这与仅仅传递对象的所有权不同;我不能这样做,因为向量需要引用而不是堆栈中的对象。Simon 的答案可能是我要找的 - 我已经忘记我可以将东西包装起来。