Пример module_function в документации ruby

Я видел пример в module_function в документации ruby. Я не понимаю последнюю часть кода, где Mod.one возвращает старое "это один", а c.one возвращает обновленное "это новый". Как это произошло

Это актуальный код из документации

 module Mod
   def one
     "This is one"
   end
   module_function :one
 end

 class Cls
   include Mod
   def call_one
     one
   end
 end

 Mod.one     #=> "This is one"
 c = Cls.new
 c.call_one  #=> "This is one"

 module Mod
   def one
     "This is the new one"
   end
 end

 Mod.one     #=> "This is one"
 c.call_one   #=> "This is the new one"

Почему Mod.one возвращает старый код, а объект Cls может получить доступ к новому? Благодарю.

1 ответ

Решение

Запуск module_function создает копию функции на уровне модуля, то есть она эквивалентна следующему коду:

module Mod
  def Mod.one
    "This is one"
  end

  def one
    "This is the new one"
  end
end

Mod.one а также one это разные методы. Первый может вызываться из любого места, второй становится методом экземпляра, когда вы включаете модуль в класс.

Другие вопросы по тегам