3

Rubyでディレクトリ内の各ファイルのすべてのクラスのインスタンスを作成し、それを配列として提供するにはどうすればよいですか?

前もって感謝します!

4

2 に答える 2

7

を使用しObjectSpaceて新しいクラスを検索し、それらをインスタンス化できます。

def load_and_instantiate(class_files)
  # Find all the classes in ObjectSpace before the requires
  before = ObjectSpace.each_object(Class).to_a
  # Require all files
  class_files.each {|file| require file }
  # Find all the classes now
  after = ObjectSpace.each_object(Class).to_a
  # Map on the difference and instantiate
  (after - before).map {|klass| klass.new }
end

# Load them!
files = Dir.glob("path/to/dir/*.rb")
objects = load_and_instantiate(files)
于 2012-07-13T12:26:36.687 に答える
0

それらがすべて含まれている.rbファイルと同じ名前を共有し、初期化に引数をとらないと仮定します...

#initialize array of objects
objects = []

#list ruby files in directory
classes = Dir.glob( "*.rb" )

#make method to easily remove file extension
def cleanse( fileName )
    return fileName.gsub( ".rb", "" )
end

classes.each do |file|
    #require the new class
    require fileName

    #add it to our array
    objects[objects.length] = eval( cleanse(file) + ".new()" )
end
于 2012-07-13T12:30:44.653 に答える