Rubyにおいて、プログラムのどこでも使用できるputs
メソッド、pp
メソッドなどは、どこで定義されており、なぜ使用することができるのか。
結論
puts
メソッド、pp
メソッドなどは、Kernelモジュールで定義されている。
Kernelモジュールは、Objectクラスでincludeされている。
Rubyのクラスはすべて、Objectクラスを継承しているので、すべてのクラスでputs
メソッドが使用できる。
Karnelモジュール
↓Kernelモジュールの、リファレンスマニュアル
https://docs.ruby-lang.org/ja/latest/class/Kernel.html
Objectクラス
Objectクラスは、Kernelモジュールをincludeしている。
puts Object.include?(Kernel) # true
すべてのクラスは、Objectクラスを継承している。 詳細に言うと、StringクラスやIntegerクラスは、Moduleクラスを継承しており、ModuleクラスはObjectクラスを継承しています。
"== Stringクラス =="
puts String.class # Class
puts String.class.superclass # Module
puts String.class.superclass.superclass # Object
"== Integerクラス =="
puts Integer.class # Class
puts Integer.class.superclass # Module
puts Integer.class.superclass.superclass # Object
またRubyにおいて、クラス構文に囲まれていない一番外側の部分をトップレベルといい、Objectクラスのインスタンスになっています。
puts self.class # Object
以上のことから、Rubyのプログラム内ではputs
メソッドが使用できます。
参考文献
プロを目指す人のためのRuby入門[改訂2版] https://gihyo.jp/book/2021/978-4-297-12437-3