Как изменить себя в блоке, как метод 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), который принимает блок), при печати self мы получим 'main', который отличается от instance_eval method.eg:

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

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

Ответы на вопрос(2)

Ваш ответ на вопрос