Я изо всех сил пытаюсь понять, как работает подтип жизни.Имя 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
здесь».
Так что бы пошло не так, если бы это было разрешено?