如何在我的.rb文件中共享变量?

我有几个.rb文件,我想在所有这些文件中使用相同的变量。 假设我的所有.rb文件都可以访问变量test_variable = "test" 。 我怎样才能做到这一点?

我使用test_variable = "test"创建了settings.rb文件,然后在另一个.rb文件中使用了test_variable = "test" require 'settings' ,但它没有用。 我想使用require not load

我试图通过在变量名前加上$来使变量成为全局变量,但我仍然在undefined local variable or method 'test_variable' for main:Object (NameError)获取undefined local variable or method 'test_variable' for main:Object (NameError)

  1. 常量(包括模块和类)将添加到共享全局环境中:

     phrogz$ cat constants1.rb TEST_VARIABLE = "test" phrogz$ cat constants2.rb require_relative 'constants1' p TEST_VARIABLE phrogz$ ruby constants2.rb "test" 
  2. 在main中声明的实例变量都是同一个main一部分:

     phrogz$ cat instance1.rb @test_variable = "test" phrogz$ cat instance2.rb require_relative 'instance1' p @test_variable phrogz$ ruby instance2.rb "test" 
  3. 全局变量也是同一环境的一部分(在1.8.6,1.8.7和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 永远不会在文件之间共享局部变量。 您可以将它们包装在模块中:

 module SharedVaribles @test_var="Hello, World" def self.test_var return @test_var end def self.test_var=(val) @test_val=val; end end 

将它放在settings.rb ,将其放入所有文件中,并使用SharedVaribles.test_varSharedVaribles.test_var=来访问变量。 请记住,Ruby的require与C的#include ,它要复杂得多。 它执行文件,然后将所有常量,模块和类导入到require

 module Foo attr_accessor :test_var def initialize @test_var = "hello world" end end 

在配置文件中使用您的变量或变量创建模块,然后将模块包含在您打算使用的任何类中。

 require_relative 'foomod.rb' class Bar include Foo end foobar = Bar.new foobar.test_var = "goodbye" puts foobar.test_var 

该类的每个实例都将使用您想要的任何值进行初始化。