Ошибка срока службы ржавчины: ожидаемый срок службы, но найденный срок службы
У меня проблема с параметрами времени жизни для структур. Я не уверен на 100%, как описать проблему, но я создал тривиальный случай, который показывает мою ошибку во время компиляции.
struct Ref;
struct Container<'a> {
r : &'a Ref
}
struct ContainerB<'a> {
c : Container<'a>
}
trait ToC {
fn to_c<'a>(&self, r : &'a Ref) -> Container<'a>;
}
impl<'a> ToC for ContainerB<'a> {
fn to_c(&self, r : &'a Ref) -> Container<'a> {
self.c
}
}
Ошибка, которую я получаю с этим
test.rs:16:3: 18:4 error: method `to_c` has an incompatible type for trait: expected concrete lifetime, but found bound lifetime parameter 'a
test.rs:16 fn to_c(&self, r : &'a Ref) -> Container<'a> {
test.rs:17 self.c
test.rs:18 }
test.rs:16:48: 18:4 note: expected concrete lifetime is the lifetime 'a as defined on the block at 16:47
test.rs:16 fn to_c(&self, r : &'a Ref) -> Container<'a> {
test.rs:17 self.c
test.rs:18 }
error: aborting due to previous error
Я перепробовал много вариантов и просто не могу заставить эту вещь скомпилировать. Я нашел другой пост здесь (Как исправить: ожидаемый конкретный срок службы, но найденный связанный параметр времени жизни) но, похоже, обходит проблему, а не решает ее. Я не могу понять, почему проблема возникает. & Ref передается с помощью ходов, поэтому он должен просто работать правильно?
Есть идеи? Спасибо за помощь.