2013-06-25 16 views
17

Sto giocherellando con Rust, passando dagli esempi, cercando di fare una lezione. Sono stato a guardare al example of StatusLineTextOggetti e classi in Rust

Mantiene alzando gli errori:

error: `self` is not available in a static method. Maybe a `self` argument is missing? [E0424] 
      self.id + self.extra 
      ^~~~ 

error: no method named `get_total` found for type `main::Thing` in the current scope 
    println!("the thing's total is {}", my_thing.get_total()); 
               ^~~~~~~~~ 

il mio codice è piuttosto semplice:

fn main() { 
    struct Thing { 
     id: i8, 
     extra: i8, 
    } 

    impl Thing { 
     pub fn new() -> Thing { 
      Thing { id: 3, extra: 2 } 
     } 
     pub fn get_total() -> i8 { 
      self.id + self.extra 
     } 
    } 

    let my_thing = Thing::new(); 
    println!("the thing's total is {}", my_thing.get_total()); 
} 

risposta

21

è necessario aggiungere un parametro esplicito self per rendere methods:

fn get_total(&self) -> i8 { 
    self.id + self.extra 
} 

Funzioni senza ex Il parametro self implicito è considerato associated functions, che può essere chiamato senza un'istanza specifica.

+1

Per chiarire, auto deve ora essere dichiarato esplicitamente nei parametri dei metodi, come da Rust 0.6 –