Оценить код с доступом к контексту переданного в блоке - PullRequest
0 голосов
/ 06 июля 2018

Я хочу иметь возможность сделать что-то вроде этого:

def do_stuff(parameter)
  raise StandardError
end

def foo(parameter)
  rescuer { do_stuff(parameter) }
end

def rescuer
  begin
    yield # evaluate passed block
  rescue StandardError
    puts parameter # evaluate this with having access to `parameter` from block
  end
end

foo('bar')
#=> bar

Какой наименее хакерский способ добиться этого?

1 Ответ

0 голосов
/ 06 июля 2018

Существует довольно грязный способ сделать это, который очень ситуативен, но он работает в этом узком случае:

def rescuer(&block)
  begin
    yield
  rescue StandardError
    p block.binding.local_variable_get(:parameter)
  end
end

binding в блоке дает вам доступ ко всем / всем локальным переменным, которые могут быть определены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...