代码之家  ›  专栏  ›  技术社区  ›  nickf

从Ruby中包含的文件访问变量

  •  8
  • nickf  · 技术社区  · 14 年前

    如何访问包含文件中定义的变量?

    # inc.rb
    foo = "bar";
    
    
    # main.rb
    require 'inc.rb'
    puts foo
    
    # NameError: undefined local variable or method `foo' for main:Object
    
    3 回复  |  直到 14 年前
        1
  •  15
  •   Chuck    14 年前

    在这种情况下,您不能访问文件中定义的范围之外的本地文件。如果需要跨越文件边界的变量,请将其设置为除局部变量以外的任何变量。 $foo , Foo @foo 一切都会好起来的。

    如果您真的不想在符号上添加任何装饰(因为您可能不喜欢它的阅读方式),一种常见的方法就是将其定义为一种方法: def foo() "bar" end .

        2
  •  6
  •   nickf    14 年前

    我接受了Chuck的答案,因为这是一个不错的解决方案,但是我实际上使用了一个不同的方法,我想我会分享。这是难以置信的黑客,但对我的目的是有用的。我需要扫描一个包含数百个文件的目录,每个文件都创建了一个同名的对象,然后转储每个对象的一些信息。出于任何严肃和非暂时的目的,我 推荐这个!

    foo = ""
    eval File.open('inc.rb').read
    
    puts foo # "bar"
    
        3
  •  2
  •   Alex Lorsung    7 年前

    我通常只是把它们定义为方法。和尼克夫说的差不多。

    文件1:

    def static_path
      '/opt/foo'
    end
    

    文件2:

    static_path
    

    然后添加一个:

    require_relative 'file path/file name' require_relative 'file name'

    要在其中使用方法/变量的文件。