пример module_function в документации ruby - PullRequest
1 голос
/ 01 марта 2011

Я видел пример в 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 Ответ

5 голосов
/ 01 марта 2011

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

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

  def one
    "This is the new one"
  end
end

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

...