:key => "value"
(hashrocket)和key: "value"
(Ruby1.9)符号有什么不同吗?
如果不是,那么我想使用key: "value"
表示法。有没有能帮助我从:x =>
转换成x:
符号的gem?
发布于 2011-12-30 09:30:17
是的,这是有区别的。这些是合法的:
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
匹配的东西解析器对这些键使用它的标签模式)。
在使用MongoDB时,散列样式的符号显示得比较多,所以如果使用MongoDB,最终会混合使用:$in
样式。而且,如果您曾经使用特定的散列键(h[:k]
)而不仅仅是整个散列(h = { ... }
),那么对于符号,仍然必须使用冒号优先样式;对于在散列之外使用的符号,也必须使用前导冒号样式。我更喜欢保持一致,所以我根本不会为JavaScript风格而烦恼。
JavaScript风格的一些问题已经在Ruby2.2中得到了修复。现在,如果符号不是有效的标签,则可以使用引号,例如:
h = { 'where is': 'pancakes house?', '$set': { a: 11 } }
但是如果你的key不是符号,你仍然需要hashrocket。
发布于 2011-12-30 09:14:28
key: "value"
是Ruby1.9的一个便利特性;只要您知道您的环境将支持它,我就认为没有理由不使用它。只是输入一个冒号要比输入一个火箭容易得多,而且我认为它看起来更干净。如果你还不了解文件操作和正则表达式,那么对于你来说,这似乎是一个理想的学习体验。
发布于 2011-12-30 09:12:43
Ruby风格的赋值是新的Ruby1.9散列语法的一部分,因此请记住,这种语法不适用于旧版本的key: value
。此外,关键字将是符号。如果您可以接受这两个约束,那么新的哈希的工作方式就像旧的哈希一样;没有理由(也许除了样式之外)转换它们。
https://stackoverflow.com/questions/8675206
复制相似问题