默认情况下如何使用字符串键创建哈希
How to create Hash with string keys by default
当我执行以下操作时:
h = { "a": 123 }
Ruby 自动将密钥转换为符号。
h[:a] # => 123
h["a"] # => nil
如何防止这种行为?我用字符串键创建了散列,并希望保持这种方式而不必总是调用 Hash#stringify_keys
.
使用哈希火箭语法:
h = { "a" => 123 }
#=> {"a"=>123}
h['a']
#=> 123
尝试
h = { "a" => 123 }
冒号使您的钥匙成为一个符号。
使用 hashrocket 代替冒号 :
h = { "a" => 123 }
#=> {"a"=>123}
消除误会:
it's confusing/frustrating when the string key gets modified to a symbol
这不是字符串开头。这只是创建符号键的另一种语法。考虑:
:'foo-bar'.class # => Symbol
想法是,有时符号中的某些字符看起来完全不同。
例如,上面没有引号的意思是"create the literal symbol :foo
and from it, subtract the value of the local variable/method invocation result bar
"。以前,除了使用 String#to_sym
之外,没有其他方法可以构造此类符号。你必须同意这看起来很糟糕:
{'foo-bar'.to_sym => 42, :this_now_needs_rocket_notation => 'baz'}
引号通常并不意味着 字符串创建 ,它们意味着 照原样 and/or 定义某物的边界。因此,它们对文字字符串语法很有意义,但这不是它们唯一的应用。
当我执行以下操作时:
h = { "a": 123 }
Ruby 自动将密钥转换为符号。
h[:a] # => 123
h["a"] # => nil
如何防止这种行为?我用字符串键创建了散列,并希望保持这种方式而不必总是调用 Hash#stringify_keys
.
使用哈希火箭语法:
h = { "a" => 123 }
#=> {"a"=>123}
h['a']
#=> 123
尝试
h = { "a" => 123 }
冒号使您的钥匙成为一个符号。
使用 hashrocket 代替冒号 :
h = { "a" => 123 }
#=> {"a"=>123}
消除误会:
it's confusing/frustrating when the string key gets modified to a symbol
这不是字符串开头。这只是创建符号键的另一种语法。考虑:
:'foo-bar'.class # => Symbol
想法是,有时符号中的某些字符看起来完全不同。
例如,上面没有引号的意思是"create the literal symbol :foo
and from it, subtract the value of the local variable/method invocation result bar
"。以前,除了使用 String#to_sym
之外,没有其他方法可以构造此类符号。你必须同意这看起来很糟糕:
{'foo-bar'.to_sym => 42, :this_now_needs_rocket_notation => 'baz'}
引号通常并不意味着 字符串创建 ,它们意味着 照原样 and/or 定义某物的边界。因此,它们对文字字符串语法很有意义,但这不是它们唯一的应用。