gpt4 book ai didi

rust - 如何在 Rust 结构中正确使用生命周期

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

我正在使用的其中一个 crate 中有以下结构。

pub struct Set<'a, 'b: 'a, 'c: 'a + 'b> {
sockets: ManagedSlice<'a, Option<Item<'b, 'c>>>,
}

impl<'a, 'b: 'a, 'c: 'a + 'b> Set<'a, 'b, 'c> {
pub fn new<SocketsT>(sockets: SocketsT) -> Set<'a, 'b, 'c>
where
SocketsT: Into<ManagedSlice<'a, Option<Item<'b, 'c>>>>,
{
let sockets = sockets.into();
Set { sockets: sockets }
}
}

我需要将结构 Set 作为另一个结构中的字段之一:

pub struct foo {
sockets: Set,
}

impl foo {
pub fn init(&mut self) {
self.sockets = Set::new(vec![]);
}
}

这会导致以下错误:

   |
21 | sockets:Set,
| ^^^^^^^^^ expected 3 lifetime parameters

我阅读了有关高级生命周期的内容,但无法弄清楚如何解决这个问题。如何在这里正确设置生命周期?

最佳答案

需要给结构添加生命周期注解:

pub struct Foo<'a, 'b: 'a, 'c: 'a + 'b> {
sockets: Set<'a, 'b, 'c>,
}

并且还意味着确保生命周期注释约束:

impl<'a, 'b: 'a, 'c: 'a + 'b> Foo<'a, 'b, 'c> {
...
}

例如,一个可能的实现:

impl<'a, 'b: 'a, 'c: 'a + 'b> Foo<'a, 'b, 'c> {
pub fn init(&mut self, v: &'a mut Vec<Option<Item<'b, 'c>>>) {
self.sockets = Set::new(ManagedSlice::Borrowed(v));
}
}

关于rust - 如何在 Rust 结构中正确使用生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49663755/

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