2010-03-01 80 views
0

我看到Ruby有以下變量: - 全局變量(由$變量名代表) - 類變量(由@@變量名代表) - 實例變量(由@variable_name表示)和 - 本地變量(由變量名或_variable_name表示)紅寶石變量澄清

偶爾我看到在軌道源代碼如下:

類SomeClass的 @var 端

在這裏,@var代表什麼,你稱它爲元類變量? 也是什麼使用這種變量的優勢?

+0

您可以發佈一個實際的例子嗎? – phtrivier 2010-03-01 16:08:36

+0

它只是一個普遍的問題,當我閱讀Ruby文檔並且偶然發現所有東西都是Ruby中的一個對象時,這意味着類本身就是對象,並且它們可以擁有自己的實例變量,所以我想到這個。另外我不記得實際的文件,但我記得在rails代碼中看到了一些用法。 – Dharam 2010-03-01 16:26:28

回答

1

它是類實例變量之一。在Ruby中,一切都是一個對象,甚至是類,所以類可以有實例變量也就不足爲奇了。

class A 
    @@class_var = 1 
    @instance_var = 1 
end 
A.class_variables 
#=> ["@@class_var"] 
A.instance_variables 
#=>["@instance_var"] 

More Info

+0

那就是我的想法,但什麼是使用類實例變量的目的或用例?從這個特定的類創建的所有實例是否也共享這些?如果是的話,一個類的實例如何訪問這些變量?我們不能只說@instance_var,它會試圖查詢實例實例變量,我們不能只說@@ instance_var,它會嘗試查詢類變量。 – Dharam 2010-03-01 16:23:39

+0

@instance僅用於對象的當前實例(所有對象都有此變量,但它的值對於實例是唯一的) @@ class在對象的所有實例之間共享(所有對象都有並共享此變量,值並非唯一) 查看attr_accessor:myvariable作爲設置變量的獲取和設置的快速方法。 – Beanish 2010-03-01 16:30:16

+0

您不能訪問它,因爲它是一個私有變量。 如果您像這樣定義訪問器(def A.get_instance_var @instance_var end),則可以使用(A.new).class.get_instance_var來訪問它。至於這個功能...這是元編程的美妙之處,你不知道什麼是可能的或有用的,直到你嘗試它,它的工作,並且它解決了一些問題;) – phtrivier 2010-03-01 16:37:02