Wenn Sie die docs for Read
überprüfen, akzeptieren die meisten Methoden eine &mut self
. Dies ist sinnvoll, da das Lesen von etwas normalerweise einen internen Offset aktualisiert, so dass der nächste Lesevorgang andere Daten zurückgibt. Dies ist jedoch kompiliert:Warum ist es möglich, Read auf einen unveränderlichen Verweis auf Datei zu implementieren?
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);
}
Die Datei ist nicht wandelbar ist, aber die Daten sicher in gelesen werden Dies scheint falsch zu mir.. It was pointed out that there is an impl<'a> Read for &'a File
, aber die Tatsache, dass eine unveränderliche Instanz scheinbar mutiert ist, erscheint immer noch seltsam.
Ist die Antwort auf [Warum kann ich File.take() auf einem Referenz nennen?] (Http://stackoverflow.com/q/31503429/395760) lösen dieses oder fragen Sie * warum * 'Read' ist implementiert auf '& File'? – delnan
@delnan Die Frage ist hier: Warum reicht '& file'? Man sollte erwarten, dass '& mut file' benötigt wird. – mdup
@delnan (Ich habe die Frage nicht gestellt, aber) Ich denke nicht, dass diese Frage beantwortet. Es muss etwas anderes passieren. 'read_to_end' sollte entweder mit' & mut File' oder '& mut & File' arbeiten, aber' (& file) 'ist keines davon. – fjh