我有几个.rb
文件,我想在所有文件中使用相同的变量.假设变量test_variable = "test"
应该可以从我的所有.rb
文件中访问.我怎样才能做到这一点?
我创建了settings.rb
文件,test_variable = "test"
然后require 'settings'
在另一个.rb
文件中使用,但它没有用.我想require
不用load
.
我试着通过在变量名前加上前缀来使变量成为全局变量$
,但我仍然得到undefined local variable or method 'test_variable' for main:Object (NameError)
.
Phr*_*ogz 44
常量(包括模块和类)将添加到共享全局环境中:
phrogz$ cat constants1.rb
TEST_VARIABLE = "test"
phrogz$ cat constants2.rb
require_relative 'constants1'
p TEST_VARIABLE
phrogz$ ruby constants2.rb
"test"
Run Code Online (Sandbox Code Playgroud)在main中声明的实例变量都是相同的部分main
:
phrogz$ cat instance1.rb
@test_variable = "test"
phrogz$ cat instance2.rb
require_relative 'instance1'
p @test_variable
phrogz$ ruby instance2.rb
"test"
Run Code Online (Sandbox Code Playgroud)全局变量也是同一环境的一部分(在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]"
Run Code Online (Sandbox Code Playgroud)Lin*_*ios 15
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
Run Code Online (Sandbox Code Playgroud)
把在settings.rb
,require
它为您的所有文件,并使用SharedVaribles.test_var
和SharedVaribles.test_var=
访问的变量.请记住,Ruby require
与C不同#include
,它要复杂得多.它执行文件,然后将所有常量,模块和类导入到require
er.
归档时间: |
|
查看次数: |
21682 次 |
最近记录: |