How to share variables across my .rb files?

I have few .rb files and I want to use the same variables in all of them. Let's say variable test_variable = "test" would be accessible from all my .rb files. How can I do that?

I created settings.rb file with test_variable = "test" then used require 'settings' in other .rb file but it didn't work. I would like to use require not load.

I tried to make the variable global adding prefix $ in front of the variable name but I am still getting undefined local variable or method 'test_variable' for main:Object (NameError)

Answers


  1. 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"
    
  2. 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"
    
  3. 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]"
    

Need Your Help

Permuting numpy's 2d array indexes

python arrays numpy multidimensional-array

are there any numpy function or clever use of views to accomplish what the following function do?

How to conditionally join a table?

sql stored-procedures join full-text-search

I am implementing a searching mechanism in a website and stumbled upon the SQL aspect of it.