2013-11-14 22 views
1

所以我們爲什麼會做這樣的紅寶石:爲什麼會在attr_accessor中使用符號而不是字符串?

attr_accessor :price 

相反的:

attr_accessor 'price' 

我已閱讀,符號類似於字符串,但它們是不可變的。但是我不明白爲什麼我們會在做attr_accessor,attr_reader時使用它。我的意思是,有什麼優勢?

+0

符號是不可變的,但這不是它們被使用的主要原因。符號只有一個實例;所有出現的相同符號都指向變量空間中的同一位置,因此,在具有大量實例變量的大型應用程序中,內存節省可能非常重要。 –

回答

0

首選項。符號需要更少的努力來輸入,一些IDE用漂亮的顏色突出顯示它們。

+2

此外,[文檔說明](http://www.ruby-doc.org/core-1.9.3/Module.html#method-i-attr_accessor)應提供符號。 –

+0

@Jordan更好的答案。 – Gumbo

+0

不僅IDE,還包括許多其他編輯器。我認爲@Jordan釘了它。 – jaeheung

1

與字符串不同,符號是實現的,因此避免了創建大量(可能)重複的字符串對象。在幾個地方使用相同的:foo符號不會以恆定的速率消耗更多的內存,除非這樣做與'foo'

+0

通常,你不需要在幾個地方使用相同的':foo'符號。當你使用它們時,你會調用像'obj.foo'。 – sawa

+0

雖然attr_accessor等類型元編程的可能性較小,但仍有可能發生,請在其他地方說'obj.public_method(:foo)'。 – Pete

+0

這與這個問題無關。 – sawa

3

這是正確的做法。 Symbol是一種數據類型,其目的是專門用來表示「名稱」或「標籤」的概念。在這裏,您正在使用它來傳遞一對方法的名稱來生成。在這種情況下,Symbol只是正確的數據類型。出於方便的原因,這些方法也採用String

相關問題