2010-12-10 147 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字符串,这样他们就可以提高性能。
  • 它们在语法上是不同的,可以使代码更具可读性,特别是对于使用散列表作为复杂的内置数据结构的程序。