質問: あるrubyの書籍を読んでいてわからない箇所がありました。 > > Rubyには関数はありません。すべてがオブジェクトに対するメソッド呼び出しです。クラス定義の外側(これをトップレベルと呼びます)で定義されるメソッドは、クラスツリーの最上位に位置するObjectクラスに定義されたものとして扱われます。そして外からは呼び出せない内部メソッドとなるようprivate指定されます。Rubyではprivate指定されたメソッドはオブジェクトを指定しない暗黙の呼び出しでしか呼べないよう設計されています。putsも同様です。このようにしてRubyでは、オブジェクト指向における設計の一貫性を維持しつつ、使い勝手の良い手続き的プログラミングができるようになっています。これがRubyの素晴らしい点です。 > > > この文章において"Rubyではprivate指定されたメソッドはオブジェクトを指定しない暗黙の呼び出しでしか呼べないよう設計されています、putsも同様です"という部分があまり理解できません。 あとこれってトップレベルで定義したメソッドのみに当てはまる話ですよね?クラス内で定義したprivateのメソッドって、オブジェクトを指定しないで呼び出せないですよね? 理解できていないのでわけのわからない文章になっているかもしれませんが、理解できている方詳しい回答いただきたいです。
回答: `puts`は、`Kernel`というモジュールで定義された**private**メソッドです(るりま)。「module function」と書いてありますが、これはモジュールの特異メソッドと、プライベートメソッドのセットになっています。 この`Kernel`は`Object`に組み込まれている(`include`)ため、`Object`の子孫が`self`となる場所(一部特殊な例を除く、Rubyのほぼすべてのコード上)で、**オブジェクトを指定せず**`puts`とすることで、`self`に`include`された`private`メソッドとしての`puts`が呼び出されます。