Rubyリファレンス: Home

singleton_methods (Object)

Edit   History

標準クラス・モジュール > Object > singleton_methods

obj.singleton_methods(all = true)

singleton_methodsメソッドは、レシーバの特異メソッドの名前を集めて配列にして返します。

引数を指定しないかtrueを渡すと、extendにより取り込んたメソッドや、特異クラスにインクルードしたモジュールのメソッドも返します。falseを指定すると、レシーバのオブジェクトに定義された特異メソッドだけを返します。

Ruby 1.9 Ruby 1.8では配列中のメソッド名は文字列ですが、Ruby 1.9ではシンボルになります。

module Double
  def double
    self + self
  end
end
 
str = "hello"
str.extend(Double)
def str.triple
  self + self + self
end
 
# 次のように書いても同じ
# class << str
#   include Double
#   def triple
#     self + self + self
#   end
# end
 
p str.singleton_methods
p str.singleton_methods(false)
["triple", "double"]
["triple"]      (Ruby 1.8の場合)
[:triple, :double]
[:triple]      (Ruby 1.9の場合)

singleton_methodsメソッドのレシーバがクラスの場合は、クラスメソッド(クラスの特異メソッド)の名前を集めるのに使えます。配列には親クラスのクラスメソッドも含まれますが、引数にfalseを渡したときは含まれません。

def Object.greet
  "hello"
end
 
p String.singleton_methods
p String.singleton_methods(false)
["greet"]
[]               (Ruby 1.8の場合)
[:try_convert, :greet]
[:try_convert]   (Ruby 1.9の場合)

関連項目