Das Lesen eines Feldes einer Struktur in einem Rost Spielplatz:
use std::sync::Mutex;
#[deriving(Show)]
struct Test{
a: uint,
}
impl Test{
fn new() -> Test{
Test { a: 0}
}
fn get(&self) -> uint {
self.a
}
}
fn main() {
let t = Test{a: 42};
let m = Mutex::new(Test::new());
println!("t abrufen: {} wobei t.a = {}", t.get(), t.a);
{
let m2 = m.lock();
println!("m2.a = {}", m2.a); // funktioniert
//println!("m2.get() = {}", m2.get()); // Fehler: Kann lokale unveränderliche Variable `m2` nicht als veränderlich ausleihen
}
}
Also in diesem Fall funktioniert der Zugriff auf das Feld m2.a
, aber das Aufrufen von m2.get()
erfordert, dass m2
veränderlich ist, obwohl get nichts verändert und nicht deklariert ist, etwas zu verändern, insbesondere nicht &self
.
Um diesen Code zum Laufen zu bringen, könnte ich einfach let mut m2 = m.lock();
deklarieren und alles funktioniert gut, aber warum brauche ich dieses mut hier und gibt es einen besseren Weg, um m2.get()
aufzurufen, ohne m2
als veränderlich zu deklarieren, ähnlich wie es für t
funktioniert, den ich als nicht veränderlich deklariere und der mir trotzdem erlaubt, t.get()
aufzurufen.