任意のオブジェクトが与えられると、#public_methods
を呼び出して、それが応答するすべてのメソッドを確認できます。ただし、継承されていないすべてのパブリックメソッド、つまり実際にこのクラスの一部であるもののクイックリストを取得すると便利な場合があります。
私は " Ruby object "のパブリックメソッドを一覧表示する簡単な方法)で見つけました。
(Foo.public_methods - Object.public_methods).sort
たくさんの基本的なRubyのものを除外できます。チェーン全体で継承されたものすべてをフィルタリングできるようにしたいです。親クラスがわかっている場合は、それですが、任意のオブジェクトの継承されていないパブリックメソッドの配列を返すことができる汎用コマンドを考え出したいのです。
public_methods
のfalse
引数にinherited
を渡すだけです。
"hello".public_methods.include?(:dup) # => true
"hello".public_methods(false).include?(:dup) # => false
あなたの質問に対する答えではありませんが、あなたが知らなかった場合、irb
はオートコンプリートを行うので、パブリックメソッドのリストを簡単に取得できます(特に探しているメソッドの始まりを知っている場合) 。タブを押すだけです。 2回押すと、すべての可能性が一覧表示されます(ただし、継承されたものも含まれます)。
> "Nice".d<tab><tab>
"Nice".delete "Nice".delete! "Nice".display "Nice".downcase
"Nice".downcase! "Nice".dump "Nice".dup "Nice".define_singleton_method
> "Nice".<tab><tab>
Display all 162 possibilities? (y or n)
...
pry
を使用すると、継承のレベルごとに分類された、使用可能なメソッドをさらに簡単に確認できます。
[1] pry(main)> cd "Nice"
[2] pry("Nice"):1> ls
Comparable#methods: < <= > >= between?
String#methods: % * + << <=> == === =~ [] []= ascii_only? bytes bytesize byteslice capitalize capitalize! casecmp center chars chomp chomp! chop chop! chr clear codepoints concat count crypt delete delete! downcase downcase! dump each_byte each_char each_codepoint each_line empty? encode encode! encoding end_with? eql? force_encoding getbyte gsub gsub! hash hex include? index insert inspect intern length lines ljust lstrip lstrip! match next next! oct ord partition prepend replace reverse reverse! rindex rjust rpartition rstrip rstrip! scan setbyte shellescape shellsplit size slice slice! split squeeze squeeze! start_with? strip strip! sub sub! succ succ! sum swapcase swapcase! to_c to_f to_i to_r to_s to_str to_sym tr tr! tr_s tr_s! unpack upcase upcase! upto valid_encoding?
locals: _ _dir_ _ex_ _file_ _in_ _out_ _pry_
Module#instance_methods を見てください。そのメソッドには1つのブール引数がありますinclude_super
継承されたメソッドも返すかどうか。デフォルト値はtrueです。
以下を使用できます。
class A
def method_1
puts "method from A"
end
end
class B < A
def method_2
puts "method from B"
end
end
B.instance_methods # => [:method_1, :method_2, ...]
B.instance_methods(false) # => [:method_2]