Как и почему работает определение этого динамического метода?

Как работает следующий код и, что более важно, почему он работает именно так?

class Example
  def one
    def one
      @value = 99
    end
    puts "Expensive Call"
    @value = 99 # assume its expensive call
  end
end

ex = Example.new
puts ex.one # => "Expensive Call"; 99
puts ex.one # => 99

Здесь при первом вызове метода oneRuby выполняет внешний метод one, но при последующих вызовах он выполняет только внутренний метод one, полностью игнорируя внешний метод one.

Я хочу знать, как это происходит и почему это происходит так.

5
задан Todd A. Jacobs 8 July 2012 в 17:18
поделиться