@ozkriff Ну я бы не сказал что он там прямо все разжевал. По сути просто сказал что так нельзя и надо ввести разные времена жизни. Вобще там рассматривается более запутанный случай и понять, что происходит что-то не то гораздо сложнее.
@Virtuos86 Может быть я не совсем понятно сформулировал. Суть в том что если явно задать вж 'static
:
let mut data:&'static u8 = &1;
{
let t = &mut data;
test(t);
}
println!("{:?}", data);
Rust начинает ругаться что data
недостаточно долго живет и что она должна быть 'static
. А если вызов test()
закомментировать все будет работать. Это как раз проявляется эффект инвариантности мутабельных ссылок о котором выше сказал @matklad.
Но все эти интересные эффекты заимствование должно закончиться когда t
покидает область видимости. А оно почему-то не заканчиваются.
@matklad Нету такой доки. Раньше это совсем вскользь упоминалось в номиконе, сейчас остался только русский перевод. Там сложно что-то понять.
Я про это когда-то загадку придумал, наверно все уже видели.