如何在我的.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)
。
-
常量(包括模块和类)将添加到共享全局环境中:
phrogz$ cat constants1.rb TEST_VARIABLE = "test" phrogz$ cat constants2.rb require_relative 'constants1' p TEST_VARIABLE phrogz$ ruby constants2.rb "test"
-
在main中声明的实例变量都是同一个
main
一部分:phrogz$ cat instance1.rb @test_variable = "test" phrogz$ cat instance2.rb require_relative 'instance1' p @test_variable phrogz$ ruby instance2.rb "test"
-
全局变量也是同一环境的一部分(在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_var
和SharedVaribles.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
该类的每个实例都将使用您想要的任何值进行初始化。