メソッド記法(Rust)
メソッド記法を読んだ。
構造体上にメソッドを定義するときはimplブロックを使う。
Rustには->演算子の代わりはない。その代わり、自動参照及び参照外しという機能がある。object.something()というふうにメソッドを呼び出すと、コンパイラはobjectがメソッドのシグニチャと合致するように、自動で&か&mut、*を付与する。
つまり
1 | p1.distance(&p2); |
が同じ扱いになる。前者のほうが読みやすい。
メソッドには自明な受け手(something()に対するobject)があるおかげでこの機能が動作する。
受け手とメソッド名がわかればコンパイラはメソッドが読み込み専用(&self)か書き込み可能(&mut self)か所有権を奪う(self)のか判断できる。
メソッドの受け手について借用が明示されないという点が、Rustの所有権を扱いやすくしてるポイント。
C/C++よりも扱いやすくていい!!!