2012-08-05 43 views
0

可能重复:
Is there any difference between the :key => “value” and key: “value” hash notations?哈希语法陌生感

这是什么之间的区别:

method: :delete 

这个?

:method => :delete 

我猜它与不同版本的Rails有关,但不知道。我只在Rails 3.x中工作。

+0

这意味着同样的事情 – Abram 2012-08-05 20:10:35

+0

以及我八九不离十推断那么多,但好奇,为什么有两种不同的方式...?一个看起来像一个类似json的方法::delete和:method =>:delete看起来更像一个rails。在所有rails版本中都可以使用这两种语法? – botbot 2012-08-05 20:15:08

+3

不需要用Rails做很多事情。这是普通的Ruby。哈希火箭符号从那以后就存在了。 Ruby 1.9引入了冒号语法。 – iltempo 2012-08-05 20:17:27

回答

0

它们是完全等效的,除了第一个只能用于Ruby 1.9以上(当然更高)。

在ruby 1.8中,散列语法使用了=>,也被称为hash rocket。你可以把任何东西放在前面,而把任何东西放在后面,但前面的东西是你的关键,在价值背后。如果你有一个符号作为键,符号为值,你可以这样写:

:method => :delete 

但你也可以写

{ 1 => 'one', :2 => 'two', 'THREE' => 3 } 

现在,红宝石1.9.x的,新的更短的语法是介绍。由于大多数人使用符号作为键,现在可以编写:

method: :delete 

这只是一个较短的/更清洁的版本。另外请注意,可以混合使用这两种样式,在某些情况下这是需要的。

E.g.在红宝石1.8你可以这样写:

{ :class => 'smthg', :'data-type' => 'a type' } 

这将转化为红宝石以下1.9

{ class: 'smthg', :'data-type' => 'a type' } 

请注意,您仍然可以继续使用“旧”哈希语法为好。这是一个偏好问题。就个人而言,只使用符号作为密钥的散列,我使用干净/短版本。我一般尽量不要在一个单一的哈希散列混合式:)