返回一个对象并从一个函数引用它

时间:2015-10-24 14:44:21

标签: rust lifetime

我想测试以下结构,其中Bar和Baz是特征:

struct Foo {
  bar: Box<Bar>,
  baz: Box<Baz>,
}

impl Foo {
  pub fn new(bar: Box<Bar>, baz: Box<Baz>) -> Foo {
    Foo { bar: bar, baz: baz }
  }
}

在我对Foo的测试中,我有FakeBarFakeBaz结构,我想写一个创建假动作的设置方法和Foo,检查它们在一起,并将所有内容作为元组返回。从概念上讲,我想要一些形式:

fn setup_foo() -> (Box<Foo>, &Bar, &Baz) {
  let fake_bar = Box::new(FakeBar);
  let fake_baz = Box::new(FakeBaz);
  let foo = Foo::new(fake_bar, fake_baz);
  return (foo, &fake_bar, &fake_baz);
}

使用此设置,编译器会抱怨返回的元组中的引用缺少生命周期。

所以问题是:有没有办法告诉编译器这个设置是否正常,因为返回的Foo拥有barbaz我们正在返回引用?或者我在这里尝试做一些根本不可能的事情?

我意识到有一些解决方法(比如向Foo添加返回对其barbaz的引用的方法),但我宁愿不添加公开{的方法如果我不需要,可以{1}}内部。此外,我很好奇我在上述情况中缺少的东西。

0 个答案:

没有答案