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: What is "main" in 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

mattr_accessorこれらを自動的に生成できるRailsの内部にあります。

于 2013-01-10T22:21:40.490 に答える