Во-первых, нам нужно наложить некоторые ограничения:
- Каждый файл script_my1.rb будет иметь модуль с именем Script_my1 .Т.е. первая буква заглавная, все остальные буквы - строчные.
Создайте два файла script_my1.rb и script_my2.rb следующим образом:
--- script_my1.rb :
module Script_my1
@value = 0
def self.some_procedure(i)
puts "#{i} my1 executed!"
@value = i
end
def self.another_procedure()
return @value
end
end
--- script_my2.rb :
module Script_my2
@value = 0
def self.some_procedure(i)
puts "#{i} my2 executed!"
@value = i
end
def self.another_procedure()
return @value
end
end
Теперь основной скрипт,который загружает и выполняет some_procedure () в каждом модуле, а затем another_procedure () .
Обратите внимание, что каждый модуль может иметь отдельные переменные с одинаковыми именами @value.
Более того, я думаю, что каждый модуль может быть выполнен в отдельном потоке и иметь доступ к глобальным переменным, но я еще не проверял его.
-- main.rb :
# Load all files from the current directory
# with name like script_xxx.rb
i = 1
result = nil
Dir['./script_*.rb'].each { |f|
next if File.directory?(f)
require (f)
moduleName = f[2,f.length].rpartition('.rb')[0].capitalize
eval ( "#{moduleName}.some_procedure(%d)" % i )
eval ( "result = #{moduleName}.another_procedure()" )
puts result
i = i + 1
}
Вывод этой программы:
1 my1 executed!
1
2 my2 executed!
2
Вот и все!