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

Rad*_*dek 31 ruby include

我有几个.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

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

    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)
  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"
    
    Run Code Online (Sandbox Code Playgroud)
  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]"
    
    Run Code Online (Sandbox Code Playgroud)

  • @Radek实例变量(例如`@ foo`)始终与特定对象相关联.当你在文件的"顶部"写"@foo = 42"时,而不是在任何方法或模块或类中,该对象是"main". (3认同)

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_varSharedVaribles.test_var=访问的变量.请记住,Ruby require与C不同#include,它要复杂得多.它执行文件,然后将所有常量,模块和类导入到requireer.