ローカル変数が優先される処理と、selfによる明示的なメソッド呼び出し
レシーバ省略とローカル変数
ちゃんと理解したことを記録するためにもメモ。 こんなコードがあるとします。
class Laputa def hover vibrate end def vibrate p "vibrate" end end l = Laputa.new l.hover #=> "vibrate"
l.hoverは当たり前のように"vibrate"を返します。 ここではLaputa#hoverを呼び出した際、Ruby側がvibrateをメソッド呼び出しと解釈しています。
もしvibrateをメソッドと解釈できなかったら
Laputa#hoverにvibrateというローカル変数をもたせた場合、vibrateはメソッドとして解釈されません。l.hoverの結果は何も返ってきません。
class Laputa def hover vibrate = 0 vibrate end def vibrate p "vibrate" end end l = Laputa.new l.hover #=> ””
メソッドを呼び出すには
レシーバ省略といって、最初のコードの際にも暗黙のselfが呼び出されていました。 ローカル変数との重複があっても、メソッドとして動かしたい場合は上記のvibrateの呼び出しを以下のように書き換えます。
self.vibrate
明示的にselfにすることでメソッドとして解釈してもらいます。