2010-12-10 145 views
3

可能重複:
Why don't more projects use Ruby Symbols instead of Strings?
What's the difference between a string and a symbol in Ruby?問關於Ruby符號

我新的Ruby語言。 從我讀到的,我必須使用符號,而不是字符串在哪裏可能。 這是正確的嗎?

+0

必須使用?你在哪裏讀這個?符號的重量更輕,所以在很多情況下,最好使用它們。 – Doon 2010-12-10 20:25:45

+0

還有一件事要記住:http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby​​-talk/164890同時閱讀關於SO的相關討論:http://stackoverflow.com/questions/659755/ruby-symbols-are-not-garbage-collected-then-isnt-it-better-to-use- a-string – 2010-12-11 00:01:25

回答

1

這取決於您使用哪一個 - 您可以在使用符號的任何地方使用字符串,但不能使用其他方式。在少數情況下,符號具有許多優點。

符號爲您提供了性能優勢,因爲兩個相同名稱的符號實際上映射到內存中的同一個對象,而兩個具有相同字符的字符串則創建不同的對象。符號不可變且重量輕,這使得它們非常適合在運行時不會改變的元素;例如,在哈希表中的鍵。

下面是來自Ruby Newbie guide to symbols一個很好的摘錄:

的所有優點鼻祖是 也是優勢鼻祖: 符號不能在運行時改變。 如果你需要的東西,絕對的, 積極必須保持恆定,並且 但你不希望使用 標識符以大寫字母 (恆定)開始,然後符號 你所需要的。

符號的最大優點是它們是不可變的(在運行時無法更改 ),有時候也就是 正是你想要的。

有時這正是你 不想要的。字符串 的大多數用法需要操作 - 您 不能(至少直接)用 符號。

符號的另一個缺點是 他們沒有String類的 豐富的實例方法集。 String類的實例方法使得 的生活更輕鬆。更容易。

5

你不需要做任何事情。但是,如果您將一遍又一遍地使用相同的字符串,則建議使用符號而不是字符串。原因是內存中只保留了1個符號,而如果使用字符串字面值,每次指定它時都會重新創建,因此可能會浪費內存。

0

符號有兩個主要優點:

  • 他們就像intern'ed字符串,這樣他們就可以提高性能。
  • 它們在語法上是不同的,可以使代碼更具可讀性,特別是對於使用散列表作爲複雜的內置數據結構的程序。