这是一个跟进问题: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 ,我不能仅使用生命周期作为参考。我必须为结构提供生命周期。
所以,我想知道里面的结构导致了这种行为,还是因为第二个例子中的一个是可变引用。如果是这样,为什么会导致这种情况。
答案 0 :(得分:2)
&'a T
表示您引用了T
对象,该对象在生命周期'a
内有效。
T<'b>
表示T
对象,其中包含一个内部对象,有效期为'b
,如struct T<'b> { t: &'b U }
。
&'a T<'b>
是一个生命'a
到T<'b>
对象的引用。
对于ResponseWriter
,它包含对Request
和TcpStream
的引用,而Request
不包含任何引用。