相关疑难解决方法(0)

获取包含模块的类列表

我有一个mixin,我想获得包含它的所有类的列表.在mixin模块中,我做了以下事情:

module MyModule
  def self.included(base)
    @classes ||= []
    @classes << base.name
  end

  def self.classes
    @classes
  end
end

class MyClass
  include MyModule
end
Run Code Online (Sandbox Code Playgroud)

这非常有效:

> MyModule.classes #=> nil
> MyClass.new #=> #<MyClass ...>
> MyModule.classes #=> ["MyClass"]
Run Code Online (Sandbox Code Playgroud)

现在,我想将这部分提取到一个单独的模块中,该模块可以包含在我的其他mixins中.所以,我想出了以下内容:

module ListIncludedClasses
  def self.included(base)
    p "...adding #{base.name} to #{self.name}.classes"

    @classes ||= []
    @classes << base.name

    base.extend(ClassMethods)
  end

  def self.classes
    @classes
  end

  module ClassMethods
    def included(module_base)
      p "...adding #{module_base.name} to #{self.name}.classes"

      @module_classes ||= []
      @module_classes << module_base.name
      super(module_base)
    end
    def classes
      @module_classes
    end
  end …
Run Code Online (Sandbox Code Playgroud)

ruby module metaprogramming mixins

16
推荐指数
1
解决办法
7117
查看次数

标签 统计

metaprogramming ×1

mixins ×1

module ×1

ruby ×1