gpt4 book ai didi

rust - 无法在装箱特征对象上调用方法,因为它的生命周期不够长

转载 作者:行者123 更新时间:2023-11-29 08:09:18 25 4
gpt4 key购买 nike

<分区>

我想编写一个函数来解析字符串并返回实现特征对象的几个结构之一,该特征对象允许分发对实现结构的引用。用例是从确定使用哪个实现的配置文件中读取字符串。代码如下所示:

trait Foo<'a> {
fn get(&'a self) -> &'a i32;
}

struct Bar {
data: i32,
}

impl<'a> Foo<'a> for Bar {
fn get(&'a self) -> &'a i32 {
&self.data
}
}

struct Baz {
data: i32,
}

impl<'a> Foo<'a> for Baz {
fn get(&'a self) -> &'a i32 {
&self.data
}
}

fn get_foo(foo: &str) -> Box<dyn Foo> {
let split = foo.splitn(2, "+").collect::<Vec<_>>();
let data = i32::from_str_radix(split[1], 10).unwrap();

if foo.starts_with("bar") {
Box::new(Bar { data })
} else {
Box::new(Baz { data })
}
}

fn main() {
let foo = get_foo("bar+0");
println!("Foo: {}", foo.get());
}

但是,当我这样做时,出现了这个错误:

error[E0597]: `*foo` does not live long enough
--> src/main.rs:38:25
|
38 | println!("Foo: {}", foo.get());
| ^^^ borrowed value does not live long enough
39 | }
| - `*foo` dropped here while still borrowed
|
= note: values in a scope are dropped in the opposite order they are created

这在 Rust 中可以做到吗?

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