作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用的其中一个 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/
我是一名优秀的程序员,十分优秀!