0

以下代码旨在确定要执行自身的哪个子类。它循环遍历 ObjectSpace 中的所有内容以查找子类,然后从那里执行正确的子类。在 Rails 中,这不起作用,因为库文件夹中的类不在 ObjectSpace 中。什么是在特定文件夹中搜索子类的方法?

def execute
  ObjectSpace.each_object(Class).select do |klass|
    if (klass < self.class)
      klass.designations.each do |designation|
        if (designation.downcase.capitalize == @action.downcase.capitalize)
          command = klass.new(@sumo_params)
          command.execute
        end
      end
    end
  end
end

或者——你会推荐这个问题的更好的解决方案吗?

4

2 回答 2

0

我会说为此使用一个模块。因此,这将使您编写如下代码:

库/base_methods.rb

module BaseMethods

  def self.included(base)
    @@classes_including ||= []
    @@classes_including << base
  end

  def do_whatever
    @@classes_including.each do |class|
      #....
    end
  end

end

lib/class_1.rb

class Class1
  include BaseMethods
end
于 2013-03-07T21:06:43.367 回答
0

我现在采取了简单的方法(遍历字符串值数组):

def execute
  @descendants.each do |descendant|
    klass = descendant.downcase.capitalize.constantize
    if (klass < self.class)
      klass.designations.each do |designation|
        if (designation.downcase.capitalize == @action.downcase.capitalize)
          command = klass.new(@sumo_params)
          command.execute
        end
      end
    end
  end
end
于 2013-03-08T14:27:31.923 回答