假設我編寫了一個沒有類定義的Ruby腳本。我仍然可以創建類變量和類級別實例變量:Ruby中的「頂級上下文對象」就像JavaScript中的全局上下文一樣嗎?
@@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
@tadman - 我問更多它是否作爲根名稱空間行爲,這將允許訪問使用該變量的其他類; 'self.Dir.pwd'什麼的。 –
'self.Dir'應該不起作用。 Dir是一個根名稱空間條目,就像任何其他類一樣。一般情況下,實例變量用於類和類的實例* only *。看到他們用於其他目的非常不規範。 JavaScript與Ruby有不同的上下文和範圍界定。另外,'@ var'對於根名稱空間來說是私有的,其他人不能訪問,因爲實例變量總是對其所有者是私有的。 – tadman