我有以下struct
:为什么这个struct成员需要两个生命期?
struct PeekableRead<'a, R: Read> {
reader: &'a mut R,
peeked_octet: Option<u8>,
}
哪个rustc
不喜欢:
…:27:1: 30:2 error: the parameter type `R` may not live long enough [E0309]
…:27 struct PeekableRead<'a, R: Read> {
…:28 reader: &'a mut R,
…:29 peeked_octet: Option<u8>,
…:30 }
…:27:1: 30:2 help: run `rustc --explain E0309` to see a detailed explanation
…:27:1: 30:2 help: consider adding an explicit lifetime bound `R: 'a`...
…:27:1: 30:2 note: ...so that the reference type `&'a mut R` does not outlive the data it points at
…:27 struct PeekableRead<'a, R: Read> {
…:28 reader: &'a mut R,
…:29 peeked_octet: Option<u8>,
…:30 }
如果我的寿命增加R
,如,R: Read + 'a
,它的工作原理。但是为什么?参考文献'a
是否指定了生命期?一定不要reader: &'a mut R
,在struct PeekableRead<'a>
住只要结构本身,因而“足够长”?
奇怪的是,我似乎需要都;如果我将'a
添加到R
并将其从参考中删除,我仍然会得到error: missing lifetime specifier
。我获得成功编译的唯一方法是两种,但对我来说,它们似乎冗余地指定了相同的东西。
(另外,为什么rustc
输出struct
两次输出?第二个看起来像什么就做一个建议,但似乎是完全一样的我有什么...)
您可以考虑struct PeekableRead “结构的外部可见API,而这些字段是实现细节。然而,这种动机不是一个通用规则,因为我们可以考虑结构的某些属性,这些属性没有像这样明确拼写出来(每个泛型参数和自动特征的方差)。 – bluss