将类包含在一个类中,该类具有引用要包含的模块的类方法

时间:2012-07-12 11:31:38

标签: ruby metaprogramming

我有以下示例

class Test
  configure_helper
end

module ConfigureHelper
  module ClassMethods
    def configure_helper
    end
  end
end

ConfigureHelper还有一些功能,可以使用包含该模块的ClassMethods扩展该类。

所以问题是,如果我使用以下代码来包含模块

Test.send :include, ConfigureHelper

将加载Test类,并为configure_helper引发NoMethodError。

有没有办法附加configure_helper方法,以便不会调用configure_helper?

2 个答案:

答案 0 :(得分:1)

为什么不在模块定义中包含模块?

module ConfigureHelper
  def self.included base
    base.extend ClassMethods
  end

  module ClassMethods
    def configure_helper
    end
  end
end

class Test
  include ConfigureHelper

  configure_helper
end

答案 1 :(得分:0)

试试吧

  class Test
    end

    module ConfigureHelper
      module ClassMethods
       def self.included(base)
         base.class_eval do
           def configure_helper
              p 'Yes'
           end
         end
       end
      end
    end


    Test.send(:include, ConfigureHelper::ClassMethods)

    Test.new.configure_helper