私はあなたが探していると思いますdefine_singleton_method
:
define_singleton_method(symbol, method) → new_method
define_singleton_method(symbol) { ブロック } → proc
レシーバーでシングルトン メソッドを定義します。メソッドパラメータは、、、またはオブジェクトにProc
することができます。ブロックが指定されている場合は、メソッド本体として使用されます。Method
UnboundMethod
define_method
onを使用するself.class
と、新しいメソッドがクラス全体のインスタンス メソッドとして作成され、クラスのすべてのインスタンスでメソッドとして使用できるようになります。
define_singleton_method
次のように使用します。
class C
def initialize(s)
define_singleton_method(s) { puts "some method #{s}" }
end
end
その後:
a = C.new('a')
b = C.new('b')
a.a # puts 'some method a'
a.b # NoMethodError
b.a # NoMethodError
b.b # puts 'some method b'
あなたinitialize
がした場合:
self.class.send(:define_method,n) { puts "some method #{n}" }
次に、次のようになります。
a.a # puts 'some method a'
a.b # puts 'some method b'
b.a # puts 'some method a'
b.b # puts 'some method b'
それはおそらくあなたが探しているものではありません。新しいインスタンスを作成し、結果としてクラス全体を変更するのは、かなり奇妙です。