在Ruby中,为什么这两个操作对于空数组和哈希值是不同的?
空数组:
[].to_s.to_sym => :[]
清空哈希:
{}.to_s.to_sym => :"{}"
答案 0 :(得分:8)
它们并没有真正的不同,只是它们的显示方式不同。 {
字符不能是符号的开头,因此它包含在引号中。如果您想要创建一个包含-
的符号,那么您将执行相同的操作,否则它将被解释为减法运算符。实际上,您可以进入IRB并测试引号不会真正影响符号。
:[] == :"[]" #=> true
因此,基本上,一个人能够使用更短的形式,另一个人必须更加冗长,以便解析器能够理解它。但两者的意义或形式没有本质区别。
答案 1 :(得分:4)
因为[]的字符串表示是“[]”而{}的字符串表示是“{}”。顺便说一下,:[]
等于:"[]"
。区别在于你可以不用括号编写符号:"[]"
,但你不能为:"{}"
编写,Ruby语法不允许这样做。