Ho un po 'di codice con cui sto combattendo. È una piccola funzione di supporto che dovrebbe restituire un Vec<&str>
alla funzione di chiamata. Tuttavia, non riesco a ottenere la vita giusta.Expanding Rust Lifetime
Ecco il frammento di codice:
fn take_symbol<'a>(ch: &'a str, current: &'a mut String) -> &'a mut TokenList<'a> {
let out = TokenList::<'a>::new();
out.push(current.as_str());
out.push(ch);
*current = String::new();
&mut out
}
Il compilatore mi sta dicendo: error: 'out' does not live long enough
e che il riferimento deve essere valido per tutta la durata del 'a
, ma sembra a me come esso è definito per 'a
.
ho anche provato a cambiare a:
let out = &mut TokenList::<'a>::new();
che non cambia nessuno dei messaggi di errore. Oppure:
let out = &'a mut TokenList::<'a>::new();
che al compilatore non piace affatto.
Come è possibile definire con una durata pari a 'a
?
Per ulteriori dettagli, ecco la mia definizione di ListaToken:
pub type Token<'a> = &'a str;
pub type TokenList<'a> = Vec<Token<'a>>;
In breve, le vite descrivono solo per quanto tempo qualcosa vive, non influenza mai quanto a lungo vive. – delnan
Peccato. Questa sarebbe una bella caratteristica. Grazie! – wmaxlees