2014-11-19 6 views
39

Wie kann ich Struktur Feld von Methode mutieren?Wie mutieren Struktur Feld in Methode

Ich will, dass

struct Point { 
    x: int, 
    y: int, 
} 

impl Point { 
    fn up(&self) { 
     self.y += 1; 
    } 
} 

fn main() { 
    let p = Point { x: 0, y: 0 }; 
    p.up(); 
} 

Aber dieser Wurf Code kompilieren Fehler:

/src/main.rs:8:3: 8:14 error: cannot assign to immutable field `self.y` 
/src/main.rs:8    self.y += 1; 

Antwort

53

Sie müssen &mut self verwenden statt &self:

struct Point { 
    x: int, 
    y: int, 
} 

impl Point { 
    fn up(&mut self) { 
     self.y += 1; 
    } 
} 

fn main() { 
    let mut p = Point { x: 0, y: 0 }; 
    p.up(); 
} 

In Rust, Wandelbarkeit geerbt: Der Eigentümer der Daten entscheidet, ob der Wert änderbar ist oder nicht. Referenzen implizieren jedoch kein Eigentum und können daher selbst unveränderlich oder veränderlich sein. Sie sollten die lesen, die all diese grundlegenden Konzepte erklärt.

+3

Das 'let p' sollte' lassen mut p' sein, um das veränderbare Borgen zu erlauben. Ich habe versucht, es zu beheben, aber Stackoverflow möchte Bearbeitungen von mindestens 6 Zeichen haben. – Sgeo

+0

@Sgeo, danke, verpasst es! –

+4

@VladimirMatveev Ich möchte nur sagen, dass, selbst wenn Sie das Buch gelesen und durchgearbeitet haben, diese Konzepte nie zuvor gesehen haben, macht es vielleicht keinen Sinn, bis Sie in eine tatsächliche Situation geraten, in der es relevant ist. So wie es für mich war, sind diese Antworten immer noch sehr hilfreich;) – Aeolun

Verwandte Themen