: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的一个便利特性;只要您知道您的环境将支持它,我就认为没有理由不使用它。只是输入一个冒号要比输入一个火箭容易得多,而且我认为它看起来更干净。如果你还不了解文件操作和正则表达式,那么对于你来说,这似乎是一个理想的学习体验。
发布于 2016-02-21 02:58:42
hash-rockets分配的Ruby散列键可以促进键值对(例如's' => x)的字符串,而通过symbols (例如key: "value"或:key => "value")分配的键不能与字符串一起分配。尽管哈希火箭为哈希表提供了自由和功能,特别是允许字符串作为关键字,但应用程序性能可能比使用符号作为哈希关键字来构建哈希表的情况慢。以下资源可能能够阐明hashrockets和symbols之间的任何区别:
https://stackoverflow.com/questions/8675206
复制相似问题