`:provider => 'value'` 和 `provider: 'value'` 的区别

Difference between `:provider => ' value '` and `provider: 'value'`

为了描述载波配置的散列,我这样写:

{
  provider: 'AWS',
  aws_access_key_id: ENV["aws_access_key_id"],
  aws_secret_access_key: ENV["aws_secret_access_key"],
}

不过教程好像建议写:

{
  :provider => 'AWS'
  :aws_access_key_id => ENV["aws_access_key_id"],
  :aws_secret_access_key => ENV["aws_secret_access_key"],
}

两者有什么区别?有充分的理由使用其中之一吗?

没有区别。

nitz@comp:~$ irb
irb(main):001:0> {a:1}
=> {:a=>1}

这是一种新语法,用于指定带有作为符号的键的散列,这是定义散列的 "normal" 方式(据我所知)。
另见 What are the benefits of the new hash syntax in Ruby 1.9?

此 "JSON" 语法已添加到 ruby 1.9 http://effectif.com/ruby/update-your-project-for-ruby-19-hash-syntax

唯一的区别是你不能用它做破折号之类的事情:

:'foo-moo' => 2

这是ruby1.9+的新语法,只是一个语法糖而已。

http://breakthebit.org/post/8453341914/ruby-19-and-the-new-hash-syntax

我更喜欢使用新语法,因为在不久的将来可能会弃用旧语法。