Вы можете сделать что-то вроде этого
module Methods
define_method :outer do
outer_var = 1
define_method :inner do
puts "defining inner"
inner_var = outer_var +1
end
outer_var
end
extend self
end
Methods.outer
#=> defining inner
#=> 1
Methods.inner
#=> 2
Это полезно, когда вы делаете такие вещи, как запись DSL, которые требуют совместного использования области между методами. Но в противном случае вам намного лучше делать что-либо еще, потому что, как говорят другие, inner
переопределяется всякий раз, когда вызывается outer
. Если вы хотите этого поведения, а иногда можете, это хороший способ его получить.