Как загрузить модули с итерацией и выполнить метод в RUBY - PullRequest
0 голосов
/ 02 августа 2010

Я хотел бы загрузить модули динамически и выполнить метод для каждого загруженного модуля: Модули находятся в каталоге с именем modules /

modules / ModA.rb

module ModA 
 def run 
   puts "module A"
  end 
end

modules /ModB.rb

module ModB 
 def run 
   puts "module B"
  end 
end

Main.rb

class Main 
  def start
    Dir.glob("modules/*.rb") do |module_file|
    load(module_file)
    # How to store modules in a list and call <Module>::run() ?
    end
  end
end


a = Main.new
a.start

Итак, после загрузки модулей я хотел бы вызвать run () каждого модуля.Как это можно сделать?

Спасибо.

1 Ответ

1 голос
/ 02 августа 2010

Вы не сможете вызывать метод run внутри вашего модуля.Для этого напишите:

module ModA 
 def self.run 
   puts "module A"
  end 
end

и так далее.После этого сделайте что-то вроде этого:

class Main 
  def start
    @modules = []
    Dir.glob("modules/*.rb") do |module_file|
        load(module_file)
        @modules << Kernel.const_get(File.basename(module_file, ".rb"))
        @modules.last.run
    end
  end
end

a = Main.new
a.start
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...