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