3

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

空数组:

[].to_s.to_sym => :[] 

空哈希:

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

2 回答 2

8

它们并没有真正的不同,只是它们的显示方式不同。该{字符不能作为符号的开头,因此用引号引起来。如果你想创建一个包含 a 的符号,你会做同样的事情-,否则它会被解释为减法运算符。事实上,您可以进入 IRB 并测试引号不会真正影响交易品种。

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

因此,基本上,一个可以使用更短的形式,而另一个必须更详细,以便解析器能够理解它。但两者的含义或形式没有本质区别。

于 2012-04-30T21:28:35.837 回答
4

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

于 2012-04-30T21:27:27.777 回答