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
メソッドとして追加されるのは知らなかった。