gpt4 book ai didi

reference - 如何创建带有引用向量的结构?

转载 作者:行者123 更新时间:2023-11-29 07:51:26 27 4
gpt4 key购买 nike

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 结构拥有一个装箱值向量,您可以在以后引用它。

Playpen link

关于reference - 如何创建带有引用向量的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36191749/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com