当我执行以下操作时:
h = { "a": 123 }
Ruby / Rails会自动将密钥转换为符号。
h[:a] # => 123
h["a"] # => nil
如何防止此行为?我使用字符串键创建了哈希,并且希望保持这种方式而不必总是调用Hash#stringify_keys
。
答案 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'}
一般来说,引用并不意味着字符串创建,它们意味着按原样和/或定义某些内容的边界。因此,它们对文字字符串语法很有意义,但这不是它们唯一的应用程序。