How to share variables across my .rb files?
Ruby will never share local variables between files. You can wrap them in a Module though:
module SharedVaribles
@test_var="Hello, World"
def self.test_var
return @test_var
end
def self.test_var=(val)
@test_val=val;
end
end
Put that in settings.rb
, require
it into all your files, and use SharedVaribles.test_var
and SharedVaribles.test_var=
to access the variable. Remember, Ruby's require
is nothing like C's #include
, it is much more complex. It executes the file, then imports all constants, modules, and classes to the require
er.
module Foo
attr_accessor :test_var
def initialize
@test_var = "hello world"
end
end
Create the module with your variable or variables in your config file and then include the module in whatever class you intend to use.
require_relative 'foomod.rb'
class Bar
include Foo
end
foobar = Bar.new
foobar.test_var = "goodbye"
puts foobar.test_var
Each instance of the class will initialize with whatever value you would like.
Constants (which include modules and classes) are added to the shared global environment:
phrogz$ cat constants1.rb TEST_VARIABLE = "test" phrogz$ cat constants2.rb require_relative 'constants1' p TEST_VARIABLE phrogz$ ruby constants2.rb "test"
Instance variables declared in main are all part of the same
main
:phrogz$ cat instance1.rb @test_variable = "test" phrogz$ cat instance2.rb require_relative 'instance1' p @test_variable phrogz$ ruby instance2.rb "test"
Global variables are also all part of the same environment (tested in 1.8.6, 1.8.7, and 1.9.2):
phrogz$ cat global1.rb $test_variable = "test" phrogz$ cat global2.rb require_relative 'global1' p $test_variable, RUBY_DESCRIPTION phrogz$ ruby global2.rb "test" "ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.7.0]"