Ich möchte auf ein Objekt als schreibgeschützt zugreifen, nachdem es an ein anderes Objekt übergeben wurde, das seinen Status ändert. Ich weiß, dass es ein Problem beim Zugriff auf ein Objekt gibt, wenn es noch unter Kontrolle ist, indem es ausgeliehen wird.Wie kann man das Ausleihen eines Objekts beenden, ohne einen neuen Bereich einzuführen?
extern crate renderay_rs;
use renderay_rs::*;
fn draw_canvas(canvas: &Canvas) {
let max_height = canvas.height;
let max_width = canvas.width;
for iterator_y in 0..max_height {
for iterator_x in 0..max_width {
print!("{}", canvas.array[iterator_y * iterator_x]);
}
print!("\n");
}
}
fn main() {
let point = Point { x: 5, y: 5 };
let mut canvas = Canvas {
width: 10,
height: 10,
array: vec!['o'; 10*10],
};
let mut renderer = CanvasRenderer::new(&mut canvas);
renderer.render_point('A', point);
draw_canvas(canvas);
}
Ich glaube, ich sollte die Kreditaufnahme nach dem renderer.render_point(..., ...)
Verfahren beenden. Gibt es einen Weg dazu? Das Objekt muss nicht von ihm oder dem CanvasRenderer
ausgeliehen werden, nachdem sein Zustand geändert wurde.
Ich habe Block Scope vorher verwendet, aber ich bin nicht glücklich mit diesem Ansatz. Ich hoffe du kannst mir einen Tipp für eine bessere Alternative geben!
Dank dafür aber wie gesagt, ich verwenden Block Umfang vor, aber bin nicht glücklich mit diesem Ansatz - gibt es wirklich keinen anderen Weg, es zu tun? – xetra11
Ich habe einen Weg mit Funktionen hinzugefügt. Was magst du nicht mit Blöcken? – mcarton
Ich denke, die Antwort ist in Ordnung: Blöcke imitieren schließlich die Laufzeit des Codes. Obwohl es pedantisch ist, ist die Verwendung von Funktionen nur ein weiterer Weg, um einen neuen Bereich/Block einzuführen^_ ^. – Shepmaster