Вы можете использовать instance_exec
для выполнения переданного блока в правильном контексте.Вместо передачи &format_proc
непосредственно на вызов map
, передайте блок, который вызывает его, используя экземпляр exec.
Что-то вроде этого:
def self.def_my_method(method_name, another_parameter, &format_proc)
define_method(method_name) do
# In reality, some more complex code here, then...
return STRINGS.map{|str| instance_exec(str, &format_proc)}
end
end
Это приводит к:
$ ruby tt.rb
*** aa ***
*** bb ***
для меня (где tt.rb
- произвольное имя, которое я дал файлу), которое, я думаю, и будет тем, что вы хотите для этого примера.