为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

牛魔王的故事 2019-06-18 13:01:34
‘:key=>’value‘和’key:‘value’散列符号之间有什么区别吗?有什么区别吗:key => "value"(哈希火箭)和key: "value"(Ruby 1.9)符号?如果没有,那么我想用key: "value"符号。有什么宝石能帮我从:x =>到x:符号?
查看完整描述

3 回答

?
狐的传说

TA贡献1804条经验 获得超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 } }

但是如果你的钥匙不是符号的话,你仍然需要哈希火箭。


查看完整回答
反对 回复 2019-06-18
?
森林海

TA贡献2011条经验 获得超2个赞

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


查看完整回答
反对 回复 2019-06-18
?
MYYA

TA贡献1868条经验 获得超4个赞

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


查看完整回答
反对 回复 2019-06-18
  • 3 回答
  • 0 关注
  • 918 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信