Ada*_*NYC 118 ruby syntax hash ruby-1.9 hashrocket
:key => "value"(hashrocket)和key: "value"(Ruby 1.9)符号之间有什么区别吗?
如果没有,那么我想使用key: "value"符号.有没有宝石可以帮助我转换:x =>为x:符号?
mu *_*ort 147
是,有一点不同.这些是合法的:
h = { :$in => array }
h = { :'a.b' => 'c' }
h[:s] = 42
Run Code Online (Sandbox Code Playgroud)
但这些不是:
h = { $in: array }
h = { 'a.b': 'c' } # but this is okay in Ruby2.2+
h[s:] = 42
Run Code Online (Sandbox Code Playgroud)
您还可以使用任何键作为键,=>这样您就可以执行此操作:
h = { C.new => 11 }
h = { 23 => 'pancakes house?' }
Run Code Online (Sandbox Code Playgroud)
但你不能这样做:
h = { C.new: 11 }
h = { 23: 'pancakes house?' }
Run Code Online (Sandbox Code Playgroud)
JavaScript样式(key: value)仅在所有Hash键都是"简单"符号时才会有用(或多或少匹配的东西/\A[a-z_]\w*\z/i,AFAIK解析器使用其标签模式来表示这些键).
:$in使用MongoDB时,样式符号会显示出相当的一点,因此如果使用MongoDB,最终会混合使用哈希样式.而且,如果您使用Hashes(h[:k])的特定键而不是整个哈希(h = { ... }),您仍然必须使用冒号优先的符号样式; 你还必须使用前导冒号样式来表示你在哈希之外使用的符号.我更喜欢保持一致,所以我根本不打算使用JavaScript风格.
在Ruby 2.2中修复了JavaScript风格的一些问题.如果您的符号不是有效标签,则现在可以使用引号,例如:
h = { 'where is': 'pancakes house?', '$set': { a: 11 } }
Run Code Online (Sandbox Code Playgroud)
但是如果你的钥匙不是符号,你仍然需要使用hashrocket.
小智 10
key: "value"是Ruby 1.9的便利功能; 只要你知道你的环境会支持它,我认为没有理由不使用它.键入冒号比使用火箭更容易,我觉得它看起来更干净.至于有一个宝石进行转换,可能不是,但如果你还不知道文件操作和正则表达式,它似乎是一个理想的学习体验.
由 hash-rockets 分配的 Ruby 哈希键可以促进键值对(例如. 's' => x)的字符串,而通过符号(例如 key: "value"或:key => "value")分配的键不能用字符串分配。 尽管哈希火箭为哈希表提供了自由度和功能,特别是允许字符串作为键,但应用程序性能可能比使用符号作为哈希键构造哈希表慢。以下资源可能能够阐明 hashrockets 和符号之间的任何差异:
JSONkey: value样式的赋值是新的 Ruby 1.9 哈希语法的一部分,因此请记住,此语法不适用于旧版本的 Ruby。此外,按键将是符号。如果您可以忍受这两个约束,那么新的哈希值就像旧的哈希值一样工作;没有理由(也许除了风格之外)转换它们。