哈希语法陌生

时间:2012-08-05 20:08:32

标签: ruby

  

可能重复:
  Is there any difference between the :key => “value” and key: “value” hash notations?

这有什么区别:

method: :delete

这个?

:method => :delete

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

1 个答案:

答案 0 :(得分:0)

它们是完全等效的,除了第一个只能用于ruby 1.9(当然还有更高版本)。

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

:method => :delete

但你也可以写

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

现在,对于ruby 1.9.x,引入了一种新的更短语法。由于大多数人使用符号作为键,现在可以写:

method: :delete

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

E.g。在ruby 1.8中你会写:

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

这将转换为ruby 1.9中的以下内容

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

请注意,您仍然可以继续使用“旧”哈希语法。这是一个偏好的问题。对于仅使用符号作为键的哈希,我使用干净/短版本。我通常尽量不在单个哈希中混合哈希样式:)