Нет, def
не работает как замыкание.
Чтобы сделать sc
доступным в def
, вы можете сделать его константой, сделать его глобальным (обычно плохая идея) или использовать define_method
с блоком (которые являются замыканиями).
Однако, поскольку вы не находитесь внутри класса, а define_method
является методом для классов (и модулей), вы не можете просто использовать его. Вы должны использовать class_eval
на собственном классе sc
, чтобы попасть внутрь класса.
Пример:
class <<sc; self end.class_eval
define_method(:should_work_closure)
puts some_local_var
end
end
Это будет работать, но выглядит немного страшно. Обычно плохая идея получить доступ к локальным переменным из окружающей области в определениях методов.