私が次のことをすると:
h = { "a": 123 }
Ruby/Railsはキーを自動的に記号に変換します。
h[:a] # => 123
h["a"] # => nil
この動作を防ぐにはどうすればよいですか?文字列キーでハッシュを作成しましたが、常にHash#stringify_keys
を呼び出さなくても、ハッシュをそのまま保持したいと考えています。
ハッシュロケット構文を使用します。
h = { "a" => 123 }
#=> {"a"=>123}
h['a']
#=> 123
コロンの代わりにハッシュロケットを使用する:
h = { "a" => 123 }
#=> {"a"=>123}
試す
h = { "a" => 123 }
コロンはあなたの鍵をシンボルにします。
誤解を解消するには:
文字列キーがシンボルに変更されると、混乱/苛立ちます
そもそも文字列ではありませんでした。これは、記号キーを作成するためのもう1つの構文です。検討してください:
:'foo-bar'.class # => Symbol
時々、まったく異なるもののように見える文字がシンボル内に存在する可能性があるという考えです。
たとえば、上記の引用符なしの場合は"リテラルシンボル:foo
を作成し、そこからローカル変数/メソッドの呼び出し結果bar
"を減算します。以前は、String#to_sym
を使用する以外に、そのようなシンボルを作成する方法はありませんでした。そして、あなたはこれがひどく見えることに同意しなければなりません:
{'foo-bar'.to_sym => 42, :this_now_needs_rocket_notation => 'baz'}
一般的に引用は文字列の作成を意味するのではなく、現状のままを意味する、および/または何かの境界を定義します。したがって、偶然にもリテラル文字列構文には多くの意味がありますが、これが唯一のアプリケーションではありません。