可能重复:
Is there any difference between the:key => “value”
andkey: “value”
hash notations?哈希语法陌生感
这是什么之间的区别:
method: :delete
这个?
:method => :delete
我猜它与不同版本的Rails有关,但不知道。我只在Rails 3.x中工作。
可能重复:
Is there any difference between the:key => “value”
andkey: “value”
hash notations?哈希语法陌生感
这是什么之间的区别:
method: :delete
这个?
:method => :delete
我猜它与不同版本的Rails有关,但不知道。我只在Rails 3.x中工作。
它们是完全等效的,除了第一个只能用于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' }
请注意,您仍然可以继续使用“旧”哈希语法为好。这是一个偏好问题。就个人而言,只使用符号作为密钥的散列,我使用干净/短版本。我一般尽量不要在一个单一的哈希散列混合式:)
这意味着同样的事情 – Abram 2012-08-05 20:10:35
以及我八九不离十推断那么多,但好奇,为什么有两种不同的方式...?一个看起来像一个类似json的方法::delete和:method =>:delete看起来更像一个rails。在所有rails版本中都可以使用这两种语法? – botbot 2012-08-05 20:15:08
不需要用Rails做很多事情。这是普通的Ruby。哈希火箭符号从那以后就存在了。 Ruby 1.9引入了冒号语法。 – iltempo 2012-08-05 20:17:27