为什么这两种结构在生命周期中的影响方式不同

时间:2014-06-18 18:39:40

标签: rust lifetime

这是一个跟进问题:How to fix: cannot infer an appropriate lifetime for automatic coercion

我想知道为什么这两种结构在受生命周期影响的方式上有所不同。

示例1

use http;

pub struct Request<'a> {
    pub origin: &'a http::server::Request,
}

示例2

use http;

pub struct Response<'a, 'b> {
    pub origin: &'a mut http::server::ResponseWriter<'b>,
}

它们看起来与我非常相似,只是第二个包含可变引用,而第一个包含不可变引用。

但是,对于示例2 ,我不能仅使用生命周期作为参考。我必须为结构提供生命周期。

所以,我想知道里面的结构导致了这种行为,还是因为第二个例子中的一个是可变引用。如果是这样,为什么会导致这种情况。

1 个答案:

答案 0 :(得分:2)

&'a T表示您引用了T对象,该对象在生命周期'a内有效。

T<'b>表示T对象,其中包含一个内部对象,有效期为'b,如struct T<'b> { t: &'b U }

因此,

&'a T<'b>是一个生命'aT<'b>对象的引用。

对于ResponseWriter,它包含对RequestTcpStream的引用,而Request不包含任何引用。