回答:
はい、違いがあります。これらは合法です:
h = { :$in => array }
h = { :'a.b' => 'c' }
h[:s] = 42
しかし、これらはそうではありません:
h = { $in: array }
h = { 'a.b': 'c' } # but this is okay in Ruby2.2+
h[s:] = 42
キーとして何でも使用できる=>
ので、これを行うことができます:
h = { C.new => 11 }
h = { 23 => 'pancakes house?' }
しかし、これはできません:
h = { C.new: 11 }
h = { 23: 'pancakes house?' }
JavaScriptスタイル(key: value
)は、すべてのハッシュキーが「単純な」記号である場合にのみ役立ちます(多かれ少なかれ一致するもの/\A[a-z_]\w*\z/i
、パーサーはこれらのキーにラベルパターンを使用します)。
:$in
MongoDBのを使用しているとき、あなたはMongoDBのを使用する場合は、ハッシュのスタイルを混合なってしまいますので、スタイルのシンボルは、公平なビットを表示します。また、h[:k]
ハッシュ全体(h = { ... }
)だけでなく、ハッシュ()の特定のキーを操作する場合でも、シンボルにはコロンファーストスタイルを使用する必要があります。また、ハッシュの外で使用するシンボルには、先頭のコロンのスタイルを使用する必要があります。私は一貫性を保つことを好むので、JavaScriptスタイルにまったく煩わされません。
JavaScriptスタイルの問題の一部はRuby 2.2で修正されています。次の例のように、有効なラベルではない記号がある場合は、引用符を使用できます。
h = { 'where is': 'pancakes house?', '$set': { a: 11 } }
ただし、キーがシンボルでない場合は、ハッシュロケットが必要です。
h[:s] = 42
の例では、この質問に関連しますか?私の意見では、JavaScriptスタイルとハッシュロケットスタイルはハッシュキーと値のペアの定義にのみ関連し、ハッシュ要素のキーへのアドレス指定には関係ありません。したがって、このh[s:] = 42
例は誤解を招くようです。
h[:s] = 42
表記法を使用します。他のオプションはありません。キーと値のペアを定義するときに、{ key: value }
JavaScriptスタイルまたは{ :key => value }
ハッシュロケットスタイルのオプションを取得します。対処シナリオは、フォーカスされているものにはまだ関連していないようです。
ハッシュロケットによって割り当てられたRubyハッシュキーは、キーと値のペア(例:。's' => x
)の文字列を容易にすることができますが、記号(例: key: "value"
または:key => "value"
)を介したキーの割り当ては、文字列で割り当てることができません。 ハッシュロケットはハッシュテーブルに自由と機能を提供し、特に文字列をキーとして許可しますが、アプリケーションのパフォーマンスは、ハッシュテーブルがシンボルをハッシュキーとして構築される場合よりも遅くなる可能性があります。次のリソースは、ハッシュロケットとシンボルの違いを明確にすることができる場合があります。
すること:key => value
はすることと同じkey: value
であり、本当に便利です。私はを使用する他の言語を見たことがありません=>
が、JavaScriptのような他の言語でkey: value
は、ハッシュと同等のデータ型でを使用します。
あなたがハッシュを書いた方法を変換する宝石に関しては、私はあなたが現在のプロジェクトのためにそれをしている方法に固執するでしょう。
* key: value
キーを使用する場合は記号になり、foo
ハッシュでそのキーに格納された値にアクセスする場合は引き続きですfoo[:key]
。
=>
。RubyはPerlに強く影響を受けているため、Perlから構文を借用したと思います:)
h = { 'a.b': 'c' }
Ruby 2.2.0の時点で合法です。bugs.ruby-lang.org/issues/4276を