methds メソッド

本日ランチの時間に、会社のエンジニアメンバーと好きな Ruby (or Rails) のメソッドについてというテーマでおしゃべりをしました。

メソッドの末尾に?が使えることが良い、injectメソッドが良い、pメソッドが良いと言った意見が出ておりました!

私は好きなメソッドとして、面白くて便利なので methds メソッドをあげました。

ただ、ちゃんとmethds メソッドについて理解できているのか?と疑問に思ったので、これを機に確認しようと思いました〜

まずは、るりまを確認。

docs.ruby-lang.org

そのオブジェクトに対して呼び出せるメソッド名の一覧を返します。このメソッドは public メソッドおよび protected メソッドの名前を返します。

ただし特別に、引数が偽の時は Object#singleton_methods(false) と同じになっています。

↑と書かれている。

「引数が偽の時は Object#singleton_methods(false) と同じ」というのがよくわかっていない?_?

Object#singleton_methods についてもるりまを確認。

docs.ruby-lang.org

そのオブジェクトに対して定義されている特異メソッド名 (public あるいは protected メソッド) の一覧を返します。

inherited_too が真のときは継承した特異メソッドを含みます。継承した特異メソッドとは Object#extend によって追加された特異メソッドや、 self がクラスの場合はスーパークラスのクラスメソッド(Classのインスタンスの特異メソッド)などです。

singleton_methods(false) は、Object#methods(false) と同じです。

↑と書かれている。

つまり、Object#singleton_methods(false)の時は、継承した特異メソッドは含まないということのよう。

irbで動かして確認する。

irb(main):004:0> [].methods
=> 
[:to_h,
 :include?,
 :at,
 :fetch,
 :last,
 略
 :__send__]
irb(main):005:0> [].methods(false)
=> []

なるほど〜