Пример 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
это разные методы. Первый может вызываться из любого места, второй становится методом экземпляра, когда вы включаете модуль в класс.