为什么在转换为字符串然后转换为符号时,空数组和哈希值的处理方式不同?

时间:2012-04-30 21:20:59

标签: ruby

在Ruby中,为什么这两个操作对于空数组和哈希值是不同的?

空数组:

[].to_s.to_sym => :[] 

清空哈希:

{}.to_s.to_sym => :"{}"

2 个答案:

答案 0 :(得分:8)

它们并没有真正的不同,只是它们的显示方式不同。 {字符不能是符号的开头,因此它包含在引号中。如果您想要创建一个包含-的符号,那么您将执行相同的操作,否则它将被解释为减法运算符。实际上,您可以进入IRB并测试引号不会真正影响符号。

:[] == :"[]" #=> true

因此,基本上,一个人能够使用更短的形式,另一个人必须更加冗长,以便解析器能够理解它。但两者的意义或形式没有本质区别。

答案 1 :(得分:4)

因为[]的字符串表示是“[]”而{}的字符串表示是“{}”。顺便说一下,:[]等于:"[]"。区别在于你可以不用括号编写符号:"[]",但你不能为:"{}"编写,Ruby语法不允许这样做。