読者です 読者をやめる 読者になる 読者になる

クラスの中からトップレベルのメソッドを呼び出す(Ruby)

同名のインスタンス・メソッドがなければトップレベルのメソッドが呼び出される。

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"