Вложенные времена жизни

Я немного озадачен. Я хочу, чтобы следующий код прошел.

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

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

fn main() {

} 

Я начал с простого перечисления, но затем, поскольку мне нужно было использовать &pointers, мне пришлось оставить его на всю жизнь. Проблема возникла, когда я добавил это перечисление в другую структуру. Я знаю, что не могу дать структуре другое время жизни, кроме 'self, но это дает мне ошибку для времени жизни, говоря, что анонимные времена жизни не разрешены в Source (это то же самое, что я не добавлял никаких жизней).


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