为什么{{}}是语法错误而[[]]不是?

时间:2014-09-08 12:12:42

标签: ruby

我试图了解{{}}[[]]工作时出现了什么问题。

#works fine
a = []
a = [[]]

h = {}
h = {{}} #throws syntax error, unexpected '}', expecting =>

4 个答案:

答案 0 :(得分:3)

因为[[]]是数组数组,而{{}}是无意义的垃圾。

答案 1 :(得分:2)

因为哈希包含键和值之间的映射,所以当数组只包含值列表时。

考虑{}哈希。就其本身而言,它只是一种价值。 所以你绝对可以做到:

{ a: {} }

但是

{ {} }

本身是不够的。

另请注意

[ {} ]

显然有效。

答案 2 :(得分:1)

您可以通过提供零个或多个键值对来创建哈希。

  • {}创建一个零键值对的散列,即空散列
  • {'foo' => 'bar'}使用一对(密钥'foo'和值'bar'
  • 创建哈希
  • {'foo'}提出SyntaxError,因为只有一个键,缺少值

错误消息显示相同:unexpected '}', expecting =>,即Ruby预计在=>之后'foo',而不是结束}

{{}}引发相同的SyntaxError因为缺少值。相当于[[]]的哈希值可能如下所示:

{{}=>{}}

答案 3 :(得分:0)

数组只需要值作为成员 所以,在这种情况下:

a = [[]]  

该成员为[],这是一个空数组 另一方面,哈希需要一个键和一个值来成为一个成员 因此,制作哈希的公式是:

h = { a key => a value, ...}

散列的每个成员用逗号分隔 因此,如果要创建一个包含空哈希的有效哈希 您可以选择以下其中一种:

h = { :key => {} }  

h = { {} => :value }