Jestem nowy na rdzę i moich trudności z sprawdzający pożyczyć.Nie można ponownie pożyczyć zmienną bo nie mogę pożyczyć niezmienna zmiennej lokalnej jako zmienny
Wywołanie consume_byte
z main
działa dobrze. Ale jeśli spróbuję dodać inną funkcję (consume_two_bytes
) pomiędzy to wszystko się rozpada.
Poniższy kod nie zostanie skompilowany, ponieważ wygląda na to, że zmienna reader
nie jest zmienna i nie można jej wypożyczyć.
Dodanie &mut
w sygnaturze funkcji powoduje jedynie zmianę błędu kompilatora.
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);
}
Dziękujemy! Nigdy nie przyszło mi do głowy, żeby użyć 'mut' bez' i '. To była poważna wizja tunelu po mojej stronie. –
@DonaldH Tak, "mut" znajdujący się w różnych miejscach jest nieco nieintuicyjny. – fjh
To nieintuicyjne, dopóki się do tego nie przyzwyczaisz, to znów staje się intuicyjne^_ ^. Wiele osób wskazuje na to, że składnia jest lustrzana w stosunku do wiązań 'let'/wzorców. – Shepmaster