Ссылка с продолжительностью супертипа не может использоваться для времени жизни подтипа. - PullRequest
0 голосов
/ 29 декабря 2018

Я изо всех сил пытаюсь понять, как работает подтип жизни.Имя subtype подсказывает мне, что если 'b является подтипом 'a, то вещи типа 'a могут использоваться везде, где будет использоваться что-то типа 'b.И практически, в контексте жизней, я не вижу, что может пойти не так, если позволить это.Однако следующий код

fn test<'a, 'b: 'a>(first: &'a mut str, second: &'b mut str) -> &'b str {
    // do something to choose between the two arguments,
    // eventually pick first on some branch
    first
}

не работает, потому что «эти два типа объявлены с разными временами жизни ... но данные из first втекают в second здесь».

Так что бы пошло не так, если бы это было разрешено?

1 Ответ

0 голосов
/ 29 декабря 2018

Так что бы пошло не так, если бы это было разрешено?

В этом примере ваши рассуждения были инвертированы : ограничение 'b: 'a читается как "'b живет столько же, сколько 'a ".Поскольку выходные данные test должны жить для как минимум до тех пор, пока время жизни 'b, 'a по-прежнему представляет возможно несовместимое время жизни, а first может на самом деле не жить достаточно долго.

Если вы перевернете время жизни, код скомпилируется.

fn test<'a, 'b: 'a>(first: &'b mut str, second: &'a mut str) -> &'a str {
    first
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...