Вы не можете сделать это. Причина того, что вы видите, в том, что здесь есть два разных контекста. Одним из них является контекст блока, который закрывает более контекст, в котором он определен. Другой - это контекст обёртки объекта Proc, который точно такой же, как и любой другой объектный контекст, и совершенно не связан с контекстом самого блока.
Я думаю, что ближе всего вы получите instance_eval
блок с использованием объекта контекста, который имеет нужные вам методы, но тогда блок не будет иметь доступа к self
, существовавшему там, где он был определен. Это зависит от вас, имеет ли это смысл для метода, который вы хотите написать.
Другой вариант - передать блок фактическому получателю для метода baz
.