leggevo il lifetimes chapter del libro Rust, e mi sono imbattuto in questo esempio per una chiamata/vita esplicito:Perché sono necessarie le vite esplicite in Rust?
struct Foo<'a> {
x: &'a i32,
}
fn main() {
let x; // -+ x goes into scope
// |
{ // |
let y = &5; // ---+ y goes into scope
let f = Foo { x: y }; // ---+ f goes into scope
x = &f.x; // | | error here
} // ---+ f and y go out of scope
// |
println!("{}", x); // |
} // -+ x goes out of scope
E 'abbastanza chiaro per me che l'errore viene impedito dal compilatore è l'uso- senza postazione del riferimento assegnato a x
: dopo aver eseguito l'ambito interno, f
e quindi &f.x
non sono più validi e non deve essere stato assegnato a x
.
Il mio problema è che il problema avrebbe potuto facilmente stati analizzati via senza usando la durata esplicito'a
, per esempio, inferendo un incarico illegale di un riferimento ad un ambito più ampio (x = &f.x;
).
In quali casi sono effettivamente necessarie vite per impedire errori di utilizzo dopo l'uso (o qualche altra classe?)?
Questo era [cross pubblicato su Reddit] (https://www.reddit.com/r/rust/comments/3efmw7/stackoverflow_why_are_explicit_lifetimes_needed/) – Shepmaster
Per i futuri lettori di questa domanda, si prega di notare che collega alla prima edizione di il libro e ora c'è una [seconda edizione] (https://doc.rust-lang.org/stable/book/second-edition/ch10-03-lifetime-syntax.html) :) – carols10cents