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

Posted

技术标签:

【中文标题】从 Ruby 中包含的文件中访问变量【英文标题】:Accessing variables from included files in Ruby 【发布时间】:2011-02-20 16:39:00 【问题描述】:

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

# inc.rb
foo = "bar";


# main.rb
require 'inc.rb'
puts foo

# NameError: undefined local variable or method `foo' for main:Object

【问题讨论】:

【参考方案1】:

您无法访问定义范围之外的本地文件——在这种情况下是文件。如果您想要跨越文件边界的变量,请将它们设为除本地变量之外的任何变量。 $fooFoo@foo 都可以。

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

【讨论】:

这在哪个 Ruby 版本中发生了变化?我一直在用 Vagrant config 使用它【参考方案2】:

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

foo = ""
eval File.open('inc.rb').read

puts foo # "bar"

【讨论】:

【参考方案3】:

我通常只是将它们定义为方法。类似于nickf所说的。

文件1:

def static_path
  '/opt/foo'
end

文件2:

static_path

然后只需添加一个:

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

到你想在其中使用方法/变量的文件。

【讨论】:

以上是关于从 Ruby 中包含的文件中访问变量的主要内容,如果未能解决你的问题,请参考以下文章

从类中包含的结构访问变量

如何访问 SpriteKit 场景编辑器参考节点上自定义类中包含的 Swift 中的变量?

在代码中访问.webtestResult文件中包含的信息

如何设置 QMenu 中包含的 QActions 的可访问名称

从单独的文件中包含一个 Ruby 类

如何评估访问查询中另一个字段中包含的字段名称?