我想测试以下结构,其中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
的测试中,我有FakeBar
和FakeBaz
结构,我想写一个创建假动作的设置方法和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
拥有bar
和baz
我们正在返回引用?或者我在这里尝试做一些根本不可能的事情?
我意识到有一些解决方法(比如向Foo
添加返回对其bar
和baz
的引用的方法),但我宁愿不添加公开{的方法如果我不需要,可以{1}}内部。此外,我很好奇我在上述情况中缺少的东西。