Rubyにおいてレシーバのないメソッドでは、暗にself
をレシーバとしているらしい。
puts "hello"
# => hello
は下の文と等しい。
self.puts "hello"
# => hello
トップレベルでのself
はmain
という名前のObjectクラスのインスタンスであり、
ObjectクラスはKernelモジュールをincludeしている。
Kernelモジュールにputsメソッドが定義されているため、トップレベルでputsが使えるということらしい。
参考
【Ruby】メソッドの前のレシーバがない(ように見える)場合の考え方)
プロを目指す人のためのRuby入門
p.300