默认情况下如何使用字符串键创建哈希

时间:2016-10-21 09:08:13

标签: ruby-on-rails ruby string syntax symbols

当我执行以下操作时:

h = { "a": 123 }

Ruby / Rails会自动将密钥转换为符号。

h[:a]  # => 123
h["a"] # => nil

如何防止此行为?我使用字符串键创建了哈希,并且希望保持这种方式而不必总是调用Hash#stringify_keys

4 个答案:

答案 0 :(得分:16)

使用哈希火箭语法:

h = { "a" => 123 }
#=> {"a"=>123}
h['a']
#=> 123

答案 1 :(得分:3)

使用hashrocket而不是冒号:

h = { "a" => 123 }
#=> {"a"=>123}

答案 2 :(得分:2)

尝试

h = { "a" => 123 }

冒号让你的钥匙成为一个符号。

答案 3 :(得分:1)

清除误解:

  

当字符串键被修改为符号

时,令人困惑/沮丧

这不是一个字符串开头。这只是创建符号键的另一种语法。考虑:

:'foo-bar'.class # => Symbol

这个想法是,有时,符号中可能会出现一些看起来完全不同的字符。

例如,上面没有引号意味着“创建文字符号:foo并从中减去局部变量/方法调用结果的值bar 。以前,除了使用String#to_sym之外,没有办法构造这样的符号。你必须同意这看起来很可怕:

{'foo-bar'.to_sym => 42, :this_now_needs_rocket_notation => 'baz'}

一般来说,引用并不意味着字符串创建,它们意味着按原样和/或定义某些内容的边界。因此,它们对文字字符串语法很有意义,但这不是它们唯一的应用程序。