同名のインスタンス・メソッドがなければトップレベルのメソッドが呼び出される。
class A def c; d; end end def d; puts "top"; end A.new.c #=>"top"
同名のインスタンス・メソッドがあれば、そちらを呼び出す。
class A def d; puts "inner"; end def c; d; end end def d; puts "top"; end A.new.c #=>"inner"
無理やり同名のトップレベルのメソッドを呼び出したければ、Object#send
を使う。これは、トップレベルのメソッドが Object クラスのプライベート・メソッドになっているからである。Object#send
はプライベート・メソッドも呼び出せてしまう。
class A def d; puts "inner"; end def c; Object.new.send(:d); end end def d; puts "top"; end A.new.c #=>"top"