私はあなたがdefine_singleton_method
を探していると思われる:
define_singleton_method(シンボル、メソッド)→NEW_METHOD
define_singleton_method(シンボル){ブロック}→procの
は、シングルトンを定義しますメソッドを呼び出します。 のメソッドのパラメータは、Proc
,Method
またはUnboundMethod
オブジェクトです。ブロックが指定されている場合、ブロックはメソッド本体として使用されます。
あなたはself.class
にdefine_method
を使用している場合、それはクラスのすべてのインスタンス上のメソッドとして利用できるようになりますので、あなたは、クラス全体のインスタンスメソッドとして新しいメソッドを作成します。あなたのinitialize
がした場合は
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'
:
class C
def initialize(s)
define_singleton_method(s) { puts "some method #{s}" }
end
end
そして:
あなたはこのようdefine_singleton_method
を使用したい
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'
これはおそらくあなたが探しているものではありません。結果として新しいインスタンスを作成し、クラス全体を変更するのはむしろ奇妙です。
あなたは何をしようとしていますか? –
何も具体的ではなく、 'define_method'を使って動的にメソッドを定義する方法を見てみよう – Bala