使模块inheritance自Ruby中的另一个模块
我正在为Rails创建一个小程序,其中包括我在ApplicationHelper
模块内部的模块内部构建的一些方法。 这是一个例子:
module Helper def time Time.now.year end end module ApplicationHelper # Inherit from Helper here... end
我知道ApplicationHelper < Helper
和include Helper
可以在类的上下文中工作,但是你会使用什么来进行模块到模块的inheritance? 谢谢。
实际上,您可以在另一个模块内部定义一个模块,然后将其包含在外部模块中。
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
一个潜在的问题是,如果包含的模块附加了类方法,那么这些方法可能会附加到错误的对象上。
在某些情况下,将“父”模块直接包含在基类中可能更安全,然后使用新方法包含另一个模块。 例如
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
块中定义方法