Jeśli sprawdzeniu docs for Read
, większość metod zaakceptować &mut self
. Ma to sens, ponieważ odczyt z czegoś zwykle aktualizuje wewnętrzne przesunięcie, aby następny odczyt zwracał inne dane. Jednak to kompiluje:Dlaczego możliwe jest zaimplementowanie Read na niezmiennym odnośniku do pliku?
use std::io::Read;
use std::fs::File;
fn main() {
let file = File::open("/etc/hosts").unwrap();
let vec = &mut Vec::new();
(&file).read_to_end(vec).unwrap();
println!("{:?}", vec);
}
Plik nie jest zmienny, ale dane są odczytywane z pewnością w ten wydaje mi się błędna.. It was pointed out that there is an impl<'a> Read for &'a File
, ale fakt, że niezmienna instancja jest pozornie zmutowana, wciąż wydaje się dziwny.
Czy odpowiedź na [Dlaczego nie mogę zadzwonić File.take() na odniesienie?] (Http://stackoverflow.com/q/31503429/395760) rozwiązać ten czy pytasz * dlaczego * 'Read' jest zaimplementowano w '& File'? – delnan
@delnan Pytanie brzmi: dlaczego 'i plik' wystarczy? Należy oczekiwać pliku '& mut file'. – mdup
@delnan (Nie zadawałem pytania, ale) Nie sądzę, że odpowiedź na to pytanie. Musi być coś jeszcze. 'read_to_end' powinno działać na' 'mut plik' lub' & mut & file', ale '(& file)' nie należy do tych. – fjh