day 20 @rust メソッド

・メソッドの実装にはimplキーワードを使う。

struct Person {
    name: String,
    age: u8,
    greeting: String,
}

impl Person {
    fn hi(&self) {
        println!("{}", &self.greeting);
    }
}

メソッドにするには第一引数をselfを使わないといけない。
またselfも普通の変数同様 self, &self, &mut selfの3つの選択肢がある。
生のselfの使いどころはそのメソッドを使った後にそのインスタンス を使われたくない時に使う。だけどこれはレアなケースらしい。
基本的には & or &mutにする。

実際に呼び出す時には(&instance).method()のようにする必要はない。自動的にメソッドのselfに指定したパターンに変えてくれる
つまり method(&self)というふうに関数を宣言したとしても、instance.method()でメソッドが使用できる。

・関連づけられた関数
impl内にはメソッドではなく関数をいれることもできる。
例えばnewのようにインスタンス を対象としない関数を作りたい時に使う。

impl Person {
    fn new() -> Person{ // selfがない
        Person {
          // fields
        }
    }
}

・implブロックを複数宣言することもできる。

impl Person {
  fn tell_me_age(&self) {
    println!("{}", &self.age);
  }
}

impl Person {
  fn tell_me_name(&self) {
    println!("{}", &self.name)
  }
}