I have a few .rb
files and I want to use the same variables in all of them. Let's say variable test_variable = "test"
should be accessible from all my .rb
files. How can I achieve that?
I created settings.rb
file with test_variable = "test"
then used require 'settings'
in another .rb
file, but it didn't work. I would like to use require
not load
.
I tried to make the variable global by prefixing the variable name with $
, but I am still getting undefined local variable or method 'test_variable' for main:Object (NameError)
.
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]"
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With