如何使用引用向量创建结构?

谭咏麟

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"); }
}

所以,我这样做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"); }
}

Help然后,您的结构拥有一个装箱值的向量,您可以随后引用它们。

游戏围栏链接

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章