【发布时间】:2023-03-20 08:35:02
【问题描述】:
假设我编写了一个没有类定义的 Ruby 脚本。我仍然可以创建类变量和类级实例变量:
@@var = "class variable!";
@var = "class instance variable!";
puts @@var;
puts @var;
这些变量属于*上下文对象。
这个*上下文对象是否类似于global context in 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({/*...*/});
【问题讨论】:
-
您可以但可能不应该。主上下文不应该以这种方式被实例变量污染。
-
@tadman - 我在问更多它是否充当根命名空间,这将允许使用该变量访问其他类;
self.Dir.pwd什么的。 -
self.Dir不应该工作。Dir是一个根命名空间条目,就像任何其他类一样。通常实例变量用于类和类的实例only。看到它们用于其他目的是非常不正常的。 JavaScript 与 Ruby 有不同的上下文和作用域概念。此外,@var对根命名空间是私有的,其他人无法访问,因为它是 JavaScript 变量,因为实例变量对其所有者始终是私有的。
标签: ruby global-object