Joel VanderWerf
2/20/2005 8:59:00 PM
Asfand Yar Qazi wrote:
> Hi,
>
> I want to be able to do the following:
>
> lots of Ruby files are in a directory, each containing stuff and a
> method 'init_file'. I want to be able to 'require' each file, and then
> call the 'init_file' method within that file.
>
> Each file will have its own 'init_file' method, so I can't just do a:
>
> require 'file'
> init_file
>
> because the init_file method will have been defined before hand.
>
> Is it possible, like in Perl, for an included file to return a value?
You can do this using the "script" lib I just mentioned on another thread.
---- main.rb ----
require 'script'
mod1 = Script.load("file1.rb")
mod2 = Script.load("file2.rb")
[mod1, mod2].each do |mod|
mod.init_file
puts "The value of X for #{mod.inspect} is #{mod::X}"
end
---- file1.rb ----
def init_file
puts "init for #{__FILE__}"
end
X = "One"
---- file2.rb ----
def init_file
puts "init for #{__FILE__}"
end
X = "Two"
------------------
Output:
init for /tmp/script-example/file1.rb
The value of X for #<Script:/tmp/script-example/file1.rb> is One
init for /tmp/script-example/file2.rb
The value of X for #<Script:/tmp/script-example/file2.rb> is Two
Script also defines #autoscript, which you can use like #autoload to
load the modules on demand and assign them to constants.