Создание модуля наследуется от другого модуля в Ruby
Я делаю небольшую программу для Rails, которая включает некоторые из моих методов, которые я встроил внутри модуля внутри модуля ApplicationHelper
. Вот пример:
module Helper
def time
Time.now.year
end
end
module ApplicationHelper
# Inherit from Helper here...
end
Я знаю, что ApplicationHelper < Helper
и include Helper
будут работать в контексте класса, но что вы будете использовать для наследования модулей-модулей? Спасибо.
Ответы
Ответ 1
Фактически вы можете определить модуль внутри другого модуля, а затем включить его внутри внешнего.
so ross$ cat >> mods.rb
module ApplicationHelper
module Helper
def time
Time.now.year
end
end
include Helper
end
class Test
include ApplicationHelper
def run
p time
end
self
end.new.run
so ross$ ruby mods.rb
2012
Ответ 2
Один потенциальный вопрос заключается в том, что если включенный модуль присоединяет методы класса, то эти методы могут быть привязаны к неправильному объекту.
В некоторых случаях может быть безопаснее включать "родительский" модуль непосредственно в базовый класс, а затем включать другой модуль с новыми методами. например
module ApplicationHelper
def self.included(base)
base.class_eval do
include Helper
include InstanceMethods
end
end
module InstanceMethods
def new_method
#..
end
end
end
Новые методы не определены непосредственно в ApplicationHelper
, поскольку include Helper
будет выполняться после определений метода, заставляя их перезаписываться Helper
. Альтернативно можно определить методы внутри блока class_eval