2012-02-23 3 views
1

ここでは一例です:Rubyはinstance_evalをで定義されたメソッドを保存する場所私の質問があるのでRubyのstoreメソッドは、(instance_evalをで定義されない)

class MyClass 
end 

obj = MyClass.new 
obj.instance_eval do 
    def hello 
    "hello" 
    end 
end 

obj.hello 
# => "hello" 

obj.methods.grep "hello" 
# => ["hello"] 

MyClass.instance_methods.grep "hello" 
# => [] 

のMyClassのインスタンスメソッドは、(「こんにちは」メソッドが含まれていません。 )?この時

+0

typoの場合は最初のdef? – lucapette

答えて

2

ルック:

obj = MyClass.new 
def obj.hello 
    "hello" 
end 

obj.hello #=> "hello" 
obj.singleton_methods #=> [:hello] 
obj.methods.grep :hello #=> [:hello] 

obj.instance_eval do 
    def hello2 ; end 
end # 

obj.singleton_methods #=> [:hello, :hello2] 

あなたの代わりにinstance_evalを使用してのあなたは、オブジェクトに直接メソッドを定義することができます見ることができるように。どちらの場合も、オブジェクトのシングルトンクラス(固有クラス)になります。これは、Ruby 1.9ではobj.singleton_class、Ruby 1.8ではclass << self ; self; endイディオムでアクセスできます。

関連する問題