2

假设我编写了一个没有类定义的 Ruby 脚本。我仍然可以创建类变量和类级实例变量:

@@var = "class variable!";
@var = "class instance variable!";

puts @@var;
puts @var;

这些变量属于顶级上下文对象。

这个顶级上下文对象是否类似于JavaScript中的全局上下文,因为它可以用作一种顶级命名空间?例如,有没有办法在 Ruby 中使用“顶级上下文对象”来做这样的事情?

var arrStore1 = new Ext.data.ArrayStore({/*...*/});
/* same call again, using the global context object */
var global = window;
var arrStore2 = new global.Ext.data.ArrayStore({/*...*/});
4

2 回答 2

2

顶级对象与任何其他 ruby​​ 对象一样。您可以在其中包含模块,它可以具有实例变量。但这并不是真正的全球背景。

有关更多详细信息,请参阅 SO:Ruby 中的“主要”是什么?

于 2013-01-10T19:58:28.447 回答
1

几乎总是最好创建某种顶级名称空间条目并将您的全局或准全局变量放在那里:

module GlobalOptions
  def self.option
    @option
  end

  def self.option=(value)
    @option = value
  end
end

GlobalOptions.option = :foo
GlobalOptions.option
# => :foo

在 Rails 内部,您mattr_accessor可以自动为您生成这些内容。

于 2013-01-10T22:21:40.490 回答