Как изменить себя в блоке, как это делает метод instance_eval?

метод instance_eval меняет себя в своем блоке, например:

class D; end
d = D.new
d.instance_eval do
  puts self  # print something like #<D:0x8a6d9f4>, not 'main'!
end

Если мы сами определяем метод (или любые другие методы (кроме instance_eval), которые принимают блок), когда print self, мы получим 'main', который отличается от метода instance_eval. например :

[1].each do |e|
  puts self  # print 'main'
end

Как я могу определить метод (который принимает блок), например instance_eval? Заранее спасибо.

8
задан Andrew Grimm 27 February 2012 в 21:32
поделиться