2014-11-19 7 views
39

Come posso modificare il campo struct dal metodo?Come modificare il campo struct nel metodo

voglio fare che

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(); 
} 

Ma questo codice di tiro errore di compilazione:

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

risposta

53

È necessario utilizzare &mut self invece di &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(); 
} 

A Rust, mutevolezza è ereditato: il proprietario dei dati decide se il valore è modificabile o meno. I riferimenti, tuttavia, non implicano la proprietà e quindi possono essere immutabili o mutevoli essi stessi. Dovresti leggere lo official book che spiega tutti questi concetti di base.

+3

Che 'let p' dovrebbe essere' let mut p', per consentire il prestito mutabile. Ho provato a risolverlo ma StackOverflow richiede che le modifiche siano almeno di 6 caratteri. – Sgeo

+0

@Sgeo, grazie, mi sono perso! –

+4

@VladimirMatveev Voglio solo dire che anche se hai letto e lavorato nel libro, non avendo mai visto prima questi concetti, potrebbe non avere molto senso finché non ti imbatti in una situazione reale in cui è rilevante. Come è stato per me, quindi queste risposte sono ancora molto utili;) – Aeolun

Problemi correlati