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

Ruby でトップレベルでメソッドを定義する

Ruby では次のようにトップレベルにメソッドを定義した場合、そのメソッドKernel モジュールの private メソッドとして定義されます。

puts Kernel.private_methods.include? :hoge
# => false

# Kernel の private メソッドに追加される
def hoge
    
end

puts Kernel.private_methods.include? :hoge
# => true

# private メソッドなので Kernel をレシーバとして呼び出せない
puts Kernel.hoge
# => Error: private method `hoge' called for Kernel:Module (NoMethodError)

トップレベルで定義したメソッドは一見、グローバル関数のようにも見えますが、実は Kernelメソッドとして定義されます。
Kernel に追加されるのは知ってたけど private メソッドとして追加されるのは知らなかった。