129

:key => "value"(hashrocket) とkey: "value"(Ruby 1.9) の表記に違いはありますか?

key: "value"そうでない場合は、表記法を使用したいと思います。:x =>からx:表記に変換するのに役立つ宝石はありますか?

4

5 に答える 5

157

はい、違いがあります。これらは合法です:

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、パーサーはこれらのキーにラベル パターンを使用します)。

MongoDB を使用すると、:$inスタイル シンボルがかなり表示されるため、MongoDB を使用するとハッシュ スタイルが混在することになります。h[:k]また、ハッシュ全体 ( ) ではなく、ハッシュ ( ) の特定のキーh = { ... }を使用する場合でも、シンボルにはコロン ファースト スタイルを使用する必要があります。また、ハッシュの外で使用するシンボルには、先頭のコロン スタイルを使用する必要があります。私は一貫性を保つことを好むので、JavaScript のスタイルはまったく気にしません。

JavaScript スタイルの問題のいくつかは、Ruby 2.2 で修正されました。有効なラベルではないシンボルがある場合は、引用符を使用できるようになりました。次に例を示します。

h = { 'where is': 'pancakes house?', '$set': { a: 11 } }

ただし、キーがシンボルでない場合でもハッシュロケットが必要です。

于 2011-12-30T01:30:17.307 に答える
11

key: "value"Ruby 1.9 の便利な機能です。あなたの環境がそれをサポートしていることがわかっている限り、それを使用しない理由はないと思います。ロケットよりもコロンを入力する方がはるかに簡単で、見た目もずっとすっきりしていると思います。変換を行う宝石があるかどうかについては、おそらくそうではありませんが、ファイル操作と正規表現をまだ知らない場合は、理想的な学習体験のように思えます。

于 2011-12-30T01:14:27.783 に答える
6

hash-rockets によって割り当てられた Ruby ハッシュキーは、キーと値のペア ( . など)の文字列を容易にすることができますが、記号's' => xによるキー割り当て( or など)文字列では割り当てることができません。 ハッシュロケットはハッシュテーブルに自由と機能を提供し、具体的には文字列をキーとして許可しますが、アプリケーションのパフォーマンスは、シンボルをハッシュキーとしてハッシュテーブルを構築する場合よりも遅くなる可能性があります。次のリソースは、ハッシュロケットとシンボルの違いを明確にすることができる場合があります。 key: "value":key => "value"

于 2016-02-20T18:58:42.100 に答える
4

JSON スタイルのkey: value割り当ては新しい Ruby 1.9 ハッシュ構文の一部であるため、この構文は古いバージョンの Ruby では機能しないことに注意してください。また、キーはシンボルになります。これら 2 つの制約を受け入れることができれば、新しいハッシュは古いハッシュと同じように機能します。それらを変換する理由は (おそらくスタイル以外に) ありません。

于 2011-12-30T01:12:42.990 に答える