to_sym
方法是什么?它有什么用途?
to_sym
将字符串转换为符号。例如,"a".to_sym
变成了:a
。
这不是Rails特有的功能,纯Ruby也有此功能。
在一些Ruby版本中,似乎符号可以转换为和从Fixnum(整数)相互转换。但是,在Ruby 1.9.2-p0的ruby-lang.org中,irb
并不允许除非你为Fixnum添加自己的to_sym
方法。我不确定Rails是否这样做,但无论如何似乎并不是很有用。
在@cHao提供的答案中,提供了有用的细节:
当需要将原始string
变量转换为symbol
时,使用to_sym
。
在某些情况下,可以通过一开始就将变量创建为symbol
而不是string
来避免使用to_sym
。例如:
my_str1 = 'foo'
my_str2 = 'bar baz'
my_sym1 = my_str1.to_sym
my_sym2 = my_str2.to_sym
# Best:
my_sym1 = :foo
my_sym2 = :'bar baz'
或者
array_of_strings = %w[foo bar baz]
array_of_symbols = array_of_strings.map(&:to_sym)
# Better:
array_of_symbols = %w[foo bar baz].map(&:to_sym)
# Best
array_of_symbols = %i[foo bar baz]
参见:
何时在Ruby中使用符号而非字符串?
何时不要使用to_sym在Ruby中?
将字符串转换为哈希表中的符号的最佳方法是什么?
大写字母 %I - 由空格分隔的插值符号数组
!
的.to_sym!
无法工作?我在这个ideone中使用了它:http://ideone.com/D7dZNz,但似乎它并没有起作用。谢谢! - Gaurang Tandonto_sym!
方法。方法名末尾的!
实际上是名称的一部分。(Ruby允许方法名以?
或!
结尾。) - cHaoto_sym!
方法,那就意味着我们想要将原始字符串更改为符号,而我们可能并不想这样做,因为原始字符串可能是不可变的。to_sym
从字符串中返回一个符号,而不尝试更改原始字符串,这可能会导致问题。 - Steven Hirlston