如果我有一个包含引用的结构,如下所示:
struct Struct<'a> {
reference: &'a str
}
如何为Struct实现AsRef?我尝试过:
impl<'a> AsRef<Struct<'a>> for Struct<'a> {
fn as_ref(&self) -> &Struct {
self
}
}
但它不能满足编译器要求:
由于需求冲突,无法为通用类型的生命周期参数推断适当的生命周期
答案 0 :(得分:3)
使用fn as_ref(&self) -> &Struct
时,编译器必须推断返回类型的(隐式)泛型生存期,但不能这样做。编译器期望使用Struct<'a>
,但是签名会提供一个自由参数。那就是为什么你得到
expected fn(&Struct<'a>) -> &Struct<'a>
found fn(&Struct<'a>) -> &Struct<'_> // '_ is some anonymous lifetime,
// which needs to come from somewhere
解决方案是修改签名以返回Struct<'a>
而不是Struct
。更短更清晰:
impl<'a> AsRef<Struct<'a>> for Struct<'a> {
fn as_ref(&self) -> &Self { // Self is Struct<'a>, the type for which we impl AsRef
self
}
}