Techioz Blog

同じ名前のメソッドから Ruby でメソッドを呼び出す

概要

これは悪い習慣であることはわかっていますが、何かを見つけたので、Ruby のメソッド呼び出しメカニズムをもっと理解したいと思いました。

最近、クラスを作成していて、メソッドに print という名前を付けました。そのプリント内で標準プリントを呼び出しましたが、明らかに問題がありました。名前が競合していることに気づいたとき、正しい解決策は自分のプリントを別の名前に変更することであるとすぐにわかりましたが、心の中に疑問が生まれました。何らかの理由で本当にネーム プリントを維持する必要がある場合、どうすればよいでしょうか。 MY メソッド print 内で標準の Ruby print を呼び出しますか?

解決策

print を呼び出す場合、これは通常 Kernel.print です。レシーバーカーネルを明示的に追加する必要がない理由は、カーネルモジュールが Object (Ruby のほとんどのオブジェクトの基本クラス) に含まれるためです。

あなたの場合、独自のクラスで print メソッドを定義しているため、Kernel#print を使用したい場合は 2 つのオプションがあり、次のいずれかを行うことができます。

例:

class MyObject
  def print(val)
    Kernel.print "#{val} called with Kernel.print" 
    puts
    super "#{val} print passed up the hierarchy chain" 
  end 
end 

o = MyObject.new
o.print('engineersmnky') 
# engineersmnky called with Kernel.print
# engineersmnky print passed up the hierarchy chain 
#=> nil