Sono nuovo a Rust e ho difficoltà con il controllore del prestito.Impossibile prendere in prestito una variabile perché non posso prendere in prestito una variabile locale immutabile come mutabile
Chiamare consume_byte
da main
funziona correttamente. Ma se provo ad aggiungere un'altra funzione (consume_two_bytes
) tra una cosa e l'altra cade a pezzi.
Il seguente codice non verrà compilato poiché sembra che la variabile reader
in consume_two_bytes
non sia mutabile e non possa essere presa in prestito.
L'aggiunta di una &mut
nella firma della funzione modifica l'errore del compilatore.
use std::io::Read;
use std::net::TcpListener;
fn consume_byte<R>(reader: R) where R: Read {
let mut buffer = vec![];
reader.take(1).read_to_end(&mut buffer).unwrap();
}
fn consume_two_bytes<R>(reader: R) where R: Read {
consume_byte(&mut reader);
consume_byte(&mut reader);
}
fn main() {
let listener = TcpListener::bind("127.0.0.1:8080").unwrap();
let (mut stream, _) = listener.accept().unwrap();
consume_byte(&mut stream);
consume_byte(&mut stream);
consume_two_bytes(&mut stream);
}
Grazie! Non mi è mai venuto in mente di usare 'mut' senza' & '. Questa è stata una visione seria del tunnel sulla mia estremità. –
@DonaldH Sì, il 'mut' in luoghi diversi è un po 'non intuitivo. – fjh
Non è intuitivo finché non ci si abitua, quindi diventa di nuovo intuitivo^_ ^. Molte persone sottolineano che la sintassi rispecchia quella dei legami 'let'/associazioni di modelli. – Shepmaster