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

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

有什么区别吗:key => "value"(哈希火箭)和key: "value"(Ruby 1.9)符号?

如果没有,那么我想用key: "value"符号。有什么宝石能帮我从:x =>x:符号?


牛魔王的故事
浏览 921回答 3
3回答

狐的传说

是的,这是有区别的。这些都是合法的: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?' }JavaScript样式(key: value)只有当您的所有哈希键都是“简单”符号(或多或少匹配的东西)时才有用。/\A[a-z_]\w*\z/i,AFAIK解析器对这些键使用其标签模式)。这个:$in在使用MongoDB时,样式符号显示得很好,所以如果使用MongoDB,您最终会混合散列样式。如果您曾经使用过特定的散列键(h[:k])而不仅仅是整个哈希(h = { ... }),您仍然必须对符号使用冒号第一样式;对于在散列之外使用的符号,还必须使用前导冒号样式。我更喜欢保持一致,所以我根本不需要使用JavaScript样式。JavaScriptStyle的一些问题已经在Ruby2.2中解决了。如果您的符号不是有效的标签,那么现在可以使用引号,例如:h = { 'where is': 'pancakes house?', '$set': { a: 11 } }但是如果你的钥匙不是符号的话,你仍然需要哈希火箭。

森林海

key: "value"是Ruby1.9的一个方便特性;只要您知道您的环境将支持它,我就没有理由不使用它。输入冒号比输入火箭容易得多,而且我认为它看上去要干净得多。至于有一个GEM来进行转换,可能不会,但是如果您还不知道文件操作和正则表达式,那么这似乎是一种理想的学习体验。

MYYA

这个key: valueJSON风格的赋值是新的Ruby1.9散列语法的一部分,所以请记住,这种语法不会适用于较早版本的Ruby。而且,钥匙将是符号。如果您可以使用这两个约束,那么新哈希就像旧哈希那样工作;没有任何理由(除了样式)来转换它们。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Ruby