Rubyでディレクトリ内の各ファイルのすべてのクラスのインスタンスを作成し、それを配列として提供するにはどうすればよいですか?
前もって感謝します!
を使用し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)
それらがすべて含まれている.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