Reference 由于需求冲突,无法推断借用表达式的适当生存期

Reference 由于需求冲突,无法推断借用表达式的适当生存期,reference,rust,lifetime,Reference,Rust,Lifetime,运行它: 我不明白需求冲突从何而来。好吧,没有冲突,因为只要FooStruct存在,一切都会存在。让我们把它拆开: pub struct FooStruct<'a> { pub bars: Vec<&'a str>, } pub trait FooTrait<'a> { fn getBars(&self) -> &'a Vec<&'a str>; } impl<'a> FooTrait&

运行它:

我不明白需求冲突从何而来。好吧,没有冲突,因为只要FooStruct存在,一切都会存在。

让我们把它拆开:

pub struct FooStruct<'a> {
  pub bars: Vec<&'a str>,
}

pub trait FooTrait<'a> {
  fn getBars(&self) -> &'a Vec<&'a str>;
}

impl<'a> FooTrait<'a> for FooStruct<'a> {
  fn getBars(&self) -> &'a Vec<&'a str> {
    &self.bars // cannot infer an appropriate lifetime for borrow expression due to conflicting requirements
  }
}
FooTrait希望getBars返回一个对容器的引用,该容器包含生存期为“a”的字符串片段。返回引用的生存期也应为“a”

让我们把它拆开:

pub struct FooStruct<'a> {
  pub bars: Vec<&'a str>,
}

pub trait FooTrait<'a> {
  fn getBars(&self) -> &'a Vec<&'a str>;
}

impl<'a> FooTrait<'a> for FooStruct<'a> {
  fn getBars(&self) -> &'a Vec<&'a str> {
    &self.bars // cannot infer an appropriate lifetime for borrow expression due to conflicting requirements
  }
}
FooTrait希望getBars返回一个对容器的引用,该容器包含生存期为“a”的字符串片段。返回引用的生存期也应为“a”


'可能比FooStruct的生存期长。那么,拥有一个&'a Vec是不合理的,因为该Vec不会持续整个'a'。'a可能比FooStruct的生命周期更长。那么,有一个&'a Vec是不合理的,因为Vec不会持续整个a。谢谢。我的错误是错误的假设,即FooStruct隐式地将“a”绑定到self。现在我明白了,它只是告诉我们这些生命的存在。让自己的一生明确化确实解决了这个问题。谢谢。我的错误是错误的假设,即FooStruct隐式地将“a”绑定到self。现在我明白了,它只是告诉我们这些生命的存在。将自我的生命周期明确化确实解决了这个问题。
pub trait FooTrait<'a> {
  fn getBars(&self) -> &'a Vec<&'a str>;
}
impl<'a> FooTrait<'a> for FooStruct<'a> {
  fn getBars(&self) -> &'a Vec<&'a str> {
    &self.bars
  }
}
pub trait FooTrait<'a> {
  fn getBars<'s>(&'s self) -> &'s Vec<&'a str>;
}

impl<'a> FooTrait<'a> for FooStruct<'a> {
  fn getBars<'s>(&'s self) -> &'s Vec<&'a str> {
    &self.bars
  }
}