【发布时间】:2023-04-11 00:59:01
【问题描述】:
我试图理解为什么 Rust 让一个类型拥有 'static 生命周期。
请看this代码:
let tcp_tx_buffer = TcpSocketBuffer::new(vec![0; 128]);
VSCode告诉我tcp_tx_buffer的类型是
smoltcp::storage::RingBuffer<'static, u8>
但如果我们在RingBuffer 上找到new method:
pub fn new<S>(storage: S) -> RingBuffer<'a, T>
where S: Into<ManagedSlice<'a, T>>,
{
RingBuffer {
storage: storage.into(),
read_at: 0,
length: 0,
}
}
返回时没有'static 生命周期。事实上,生命周期与输入 'a 相同。如果let tcp_tx_buffer 在main 之外,我猜它是static,但它有自己的范围。或者 Rust 是否认为 main 具有 'static 生命周期?
【问题讨论】:
-
因为生命周期无关紧要,ManagedSlice 基本上是一头牛,如果值是借用(实际切片),生命周期就在那里。由于您给它一个拥有的值,因此对象没有无效的生命周期,因此它可以获得“最宽”的可能生命周期,即
'static。 -
很难回答您的问题,因为它不包含minimal reproducible example。我们无法分辨代码中存在哪些 crate(及其版本)、类型、特征、字段等。如果您尝试在Rust Playground 上重现您的错误,如果可能的话,这将使我们更容易为您提供帮助,否则在一个全新的 Cargo 项目中,然后在edit 您的问题中包含附加信息。您可以使用Rust-specific MRE tips 来减少您在此处发布的原始代码。谢谢!
标签: rust