def define_singleton_method_by_proc(obj, name, block)
metaclass = class << obj; self; end
metaclass.send(:define_method, name, block)
end
p = proc { "foobar!" }
define_singleton_method_by_proc(y, :bar, p)
か、あなたが作るために猿パッチオブジェクトにしたい場合は、それは簡単
class Object
# note that this method is already defined in Ruby 1.9
def define_singleton_method(name, callable = nil, &block)
block ||= callable
metaclass = class << self; self; end
metaclass.send(:define_method, name, block)
end
end
p = proc { "foobar!" }
y.define_singleton_method(:bar, p)
#or
y.define_singleton_method(:bar) do
"foobar!"
end
や、あなたのPROCをインラインで定義する場合、これはより読みやすいかもしれ
class << y
define_method(:bar, proc { "foobar!" })
end
または
class << y
define_method(:bar) { "foobar!" }
end
これはmoです。あなたは、オブジェクトの「シングルトンクラス」を取得するための構文class <<object
を使用することができますST読める、おそらくあなたのニーズに適合しない
def y.bar
"goodbye"
end
This question is highly related
単純な変数に外部定義されたprocがある場合、グローバル変数またはインスタンス変数に頼らずにクラス<< str1によって作成された新しいスコープに取得することは難しい –