Ruby 3.4 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Objectクラス > singleton_method
singleton_method(name) -> Method[permalink][rdoc]オブジェクトの特異メソッド name をオブジェクト化した Method オブジェクトを返します。
特異クラスに include / prepend されたモジュールのインスタンスメソッド(例えば Object#extend で追加したモジュールのメソッド)も対象になります。
name:NameError:class Demo
def initialize(n)
@iv = n
end
def hello()
"Hello, @iv = #{@iv}"
end
end
k = Demo.new(99)
def k.hi
"Hi, @iv = #{@iv}"
end
m = k.singleton_method(:hi) # => #<Method: #<Demo:0xf8b0c3c4 @iv=99>.hi>
p m.call # => "Hi, @iv = 99"
m = k.singleton_method(:hello) # ~> NameError
例: extend で追加したモジュールのメソッド
o = Object.new
o.extend(Module.new { def a = 1 })
p o.singleton_method(:a).call # => 1
[SEE_ALSO] Module#instance_method, Method, BasicObject#__send__, Object#send, Kernel.#eval, Object#method