:key => "value"(hashRocket)和 key: "value"(Ruby 1.9)符号有什么区别吗?
:key => "value"
key: "value"
如果没有,那么我想使用 key: "value"表示法。有没有一个宝石,帮助我转换从 :x =>到 x:符号?
:x =>
x:
key: value JSON 风格的分配是新的 Ruby 1.9散列语法的一部分,因此请记住,这种语法不适用于旧版本的 Ruby。还有,钥匙是符号。如果您可以忍受这两个约束,那么新散列的工作方式就像旧散列一样; 没有理由(也许除了样式之外)转换它们。
key: value
key: "value"是 Ruby 1.9的一个便利特性; 只要你知道你的环境会支持它,我看没有理由不使用它。输入冒号比输入火箭要容易得多,而且我认为它看起来干净得多。至于有一个 gem 来做转换,可能不会,但它似乎是一个理想的学习经验为您,如果你不知道文件操作和正则表达式。
是的,有区别。这些是合法的:
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)只有在所有的 Hash 键都是“简单”符号(或多或少与 /\A[a-z_]\w*\z/i匹配,解析器对这些键使用其标签模式的 AFAIK)时才有用。
/\A[a-z_]\w*\z/i
使用 MongoDB 时,:$in样式符号会显示出来,所以如果使用 MongoDB,最终会混合使用哈希样式。而且,如果你曾经使用过特定的 Hash 键(h[:k])而不仅仅是整个 Hash 键(h = { ... }) ,你仍然必须使用冒号优先的符号样式; 你还必须使用前导冒号样式的符号,你使用外面的 Hash。我更喜欢保持一致性,这样我就根本不用为 JavaScript 样式操心了。
:$in
h[:k]
h = { ... }
JavaScript 风格的一些问题在 Ruby 2.2中已经得到解决。现在,如果有无效标签的符号,可以使用引号,例如:
h = { 'where is': 'pancakes house?', '$set': { a: 11 } }
但是如果你的钥匙不是符号,你仍然需要散列火箭。
做 :key => value和做 key: value是一样的,实际上只是一种方便。我还没有看到其他语言使用 =>,但是像 Javascript 这样的语言在它们的 Hash 等效数据类型中使用 key: value。
:key => value
至于转换您编写哈希表的方式的 gem,我将坚持您在当前项目中的方式。
* 注意,在使用 key: value时,键将是一个符号,并且要访问在 foo散列中存储在该键的值仍将是 foo[:key]。
foo
foo[:key]
哈希火箭分配的 Ruby 哈希键可以简化键值对的字符串(例如:。's' => x) ,而密钥分配通过 符号(例如:。 key: "value"或 :key => "value") 不能与字符串一起分配。虽然哈希火箭提供自由和功能的哈希表,特别允许字符串作为键,应用程序的性能可能会慢于如果哈希表是用符号作为哈希键构造。下列资源可能能够澄清散列火箭和符号之间的任何区别:
's' => x