Jas*_*Tan 5 reference lifetime rust
Rust似乎是一种最佳语言-我应该知道与编译器作斗争是要付出代价的。我正在尝试为结构创建构造函数,但does not live long enough
出现错误。
蒸馏至骨头,我有:
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"); }
}
Run Code Online (Sandbox Code Playgroud)
所以,我这样做list
是因为该向量应该包含特征对象的列表。(假定)它异构地实现了提供的特征的任何类。据我了解,这意味着我必须使用引用,以便向量具有实际大小可以使用。并且,由于这是参考,因此必须终生存在,以确保他们生活和死亡。
问题是,我知道出了什么问题。在中new
,它Test
属于new
作用域,我尝试将其引用向上传递给函数。如果我这样做,Test
超出范围,引用不好。那我该怎么办?我怎样才能使物体寿命长达Help
?毕竟,实际上没有人拥有它。
另外,如果有人对如何从函数中返回引用有任何一般性的提示,我将很高兴听到它们。
编辑这与简单地放弃对象的所有权不同;我不能这样做,因为向量需要引用而不是堆栈上的对象。西蒙(Simon)的答案可能是我想要的-我忘了我可以像这样整理东西。
您可能实际上不想返回引用...但您可以将它们装箱并让它们拥有装箱的值:
fn main() {
println!("RUST PLEASE");
}
struct Help {
list: Vec<Box<Traits>>
}
impl Help {
fn new() -> Help {
Help { list: vec![Box::new(Test)] }
}
}
trait Traits {
fn mice(&self);
}
struct Test;
impl Traits for Test {
fn mice(&self) { print!("WHY"); }
}
Run Code Online (Sandbox Code Playgroud)
然后,您的Help
结构体拥有一个装箱值向量,您可以在以后引用该向量。
归档时间: |
|
查看次数: |
2741 次 |
最近记录: |