Вложени времена на живот

Малко съм объркан. Искам да мине следният код.

enum Source<'self> {
    String(&'self str),
    ReaderUtil(&'self ReaderUtil)
}

pub struct Matrix<'self> {
      source: &'self Source
}

fn main() {

} 

Започнах само с enum, но след това, тъй като трябваше да използвам &pointers, трябваше да му дам цял живот. Проблемът се появи, когато добавих това enum към друга структура. Знам, че не мога да дам на структурата друг живот освен 'self, но ми дава грешка за живота, казвайки, че анонимните животи не са разрешени в Източника (което е същото, както не съм добавил никакви животи).


person Daniel Fath    schedule 28.08.2013    source източник


Отговори (1)


enum Source<'self> {
    String(&'self str),
    ReaderUtil(&'self ReaderUtil)
}

pub struct Matrix<'self> {
      source: &'self Source<'self>
}

fn main() {

} 

Декларирахте своя enum Source с параметър за цял живот, enum Source<'self>. Това означава, че трябва също да декларирате продължителността на живота на Source в Matrix.

person Maik Klein    schedule 29.08.2013
comment
Казано по-ясно, точно както при генеричните типове като Foo<T>, където Foo не е валиден тип без <T>, Source не е валиден тип без уточняване на живота му, като Source<'self>. - person Chris Morgan; 29.08.2013