我正在使用这段代码来更好地理解生命周期和省略。这段代码已经编译通过。
struct Bytes<'a>(&'a [u8]);
impl<'a> Bytes<'a> {
fn first_two<'b>(self: &'b Bytes<'a>) -> &'b [u8]
where 'b: 'a
{
&self.0[..2]
}
}
如何使得绑定到“b: 'a”的
where
对self
可接受?难道对于self
来说,它不应该总是反过来才有效吗?返回值指向
Bytes
内部的切片,其生命周期为'a
。如果'b
的寿命可以超过'a
,那么输出如何具有生命周期'b
?
:
看作“比...寿命长”。 因此,'a: 'b
的意思是“'a
比'b
寿命长”。'a
必须比'b
寿命长,才能使&'b Bytes<'a>
成为良构的。 - trent&'b Bytes<'a>
隐含地导致了'a: 'b
,考虑到你的显式声明'b: 'a
,实质上要求'a = 'b
(因此引发疑问为什么要引入'b
生命周期参数,而不是始终使用'a
). - eggyal