2017-04-07 3 views
-1

method1のクラスObject1と、Kernelモジュールの中に "global" method2がある場合は、ブロックの呼び出しオブジェクトを取得する

method1ブロックをprocに変換して呼び出して呼び出します。私はそのようなことがある場合は

obj1 = new Object1 
obj1.method1(arg1,arg2){ method2() } 

をそれがobj1は、ブロックと呼ばれることを知ってmethod2で可能ですか?

+0

'method2'が内にある必要はありません。 'Kernel'モジュールは通過したすべてのブロックでアクセスする必要があります – tomatediabolik

答えて

1

method2をグローバルメソッドにしたいとします。バインディングを渡すことで呼び出し元オブジェクトへのアクセスを取得します。しかし、はるかに簡単な方法はそれに呼び出し側のオブジェクトを渡すことです:

例:

def method2(o) 
    #puts this.object_id 
    puts "Inside method2()" 
    puts "#{o.object_id}" 
end 


class Object1 
    def method1 
    method2(self) 
    end 
end 

obj1 = Object1.new 

puts obj1.object_id 

obj1.method1() 

出力:

23644040 
Inside method2() 
23644040 
関連する問題