2014-11-19 14 views
39

Jak mogę zmutować pole struct z metody?Jak zmutować pole strukturalne w metodzie

chcę zrobić

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

Ale to rzut kod skompilować błędu:

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

Odpowiedz

53

Trzeba użyć &mut self zamiast &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(); 
} 

w Rust, zmienność jest dziedziczone: właściciel danych decyduje, czy wartość jest zmienna czy nie. Referencje jednak nie implikują własności, a zatem same mogą być niezmienne lub zmienne. Powinieneś przeczytać official book, który wyjaśnia wszystkie te podstawowe pojęcia.

+3

To 'niech p' powinno być' let mut p', aby pozwolić na użyczenie zmiennego. Próbowałem to naprawić, ale Stackoverflow chce, żeby edycje miały co najmniej 6 znaków. – Sgeo

+0

@Sgeo, dzięki, spudłowałem! –

+4

@ Vladimir Matveev Po prostu chcę powiedzieć, że nawet jeśli czytasz i pracujesz nad książką, nigdy wcześniej nie widziałem tych pojęć, może to nie mieć większego sensu, dopóki nie natkniesz się na rzeczywistą sytuację, w której jest to istotne. Tak jak było dla mnie, więc te odpowiedzi są nadal bardzo pomocne;) – Aeolun

Powiązane problemy