‘:key=>’value‘和’key:‘value’散列符号之间有什么区别吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

:key => "value"(hashrocket)和key: "value"(Ruby 1.9)符号之间是否有区别?

如果没有,那么我想用key: "value"符号。

提问于
用户回答回答于

是,有一点不同。这些是合法的:

h = { :$in => array }
h = { :'a.b' => 'c' }
h[:s] = 42

但这些不是:

h = { $in: array }
h = { 'a.b': 'c' } # but this is okay in Ruby2.2+
h[s:] = 42

你也可以使用任何东西作为关键,=>所以你可以这样做:

h = { C.new => 11 }
h = { 23 => 'pancakes house?' }

但你不能这样做:

h = { C.new: 11 }
h = { 23: 'pancakes house?' }

key: value只有当所有的哈希键都是“简单”符号(或多或少匹配/\A[a-z_]\w*\z/i,AFAIK解析器使用它的标签模式来处理这些键)时,JavaScript样式()才有用。

:$in使用MongoDB时,风格符号显示出相当一点,所以如果您使用MongoDB,您最终会混合使用哈希样式。而且,如果您曾经使用过Hashes(h[:k])的特定键而不是整个哈希(h = { ... }),那么您仍然必须使用冒号优先方式来表示符号; 您还必须使用引号分隔样式来表示您在哈希之外使用的符号。我更喜欢一致,所以我根本不打扰JavaScript风格。

Ruby 2.2中的一些JavaScript风格问题已得到解决。如果您的符号不是有效标签,现在可以使用引号,例如:

h = { 'where is': 'pancakes house?', '$set': { a: 11 } }

但是,如果你的钥匙不是符号,你仍然需要哈克斯。

用户回答回答于

key: "value"是Ruby 1.9的一个方便功能; 只要你知道你的环境会支持它,我没有理由不使用它。我认为它看起来更干净。至于是否有宝石来做转换,可能不会,但如果你还不知道文件操作和正则表达式,那对你来说这似乎是一种理想的学习体验。

扫码关注云+社区