2013-08-13 9 views
7

ルビーにコロンを追加して前置することの違いは何ですか?コロンの前置と後ろの違い(:item対アイテム:)

例:

#In rails you often have things like this: 
has_many :models, dependent: :destroy 

なぜdependent:は特許コロンを持っていますが、:models:destroyがプリペンドコロンがありますか?違いはなんですか?

+0

[\ key: "value" \ "と\ key:"値 "ハッシュ表記の間に違いはありますか?](http://stackoverflow.com/questions/8675206/is-there-any-difference-the-key-value-and-key-value-hash-no)は、 –

答えて

9

これはハッシュのキーであるシンボルを定義するためのRuby 1.9の新しい構文であると同じです。

前もって付加されて付加された:は、symbolを定義しますが、後者はハッシュの初期化中のみ有効です。

symbolは軽量の文字列定数と考えることができます。

それは前1.9へ

:dependent => :destroy 

と同等ですが、ハッシュはやや冗長と入力する厄介である構文で定義された:

hash = { 
    :key => "value", 
    :another_key => 4 
} 

彼らは1.9でそれを簡素化:

hash = { 
    key: "value", 
    another_key: 4 
} 

1.9より前のRubyで使用したいモジュールを作成している場合は、古い構文。

4

どちらの場合も、コロンはシンボルを示しますが、シンボルを付加することは、シンボルがハッシュのキーである場合には省略されます。

dependent: :destroy 

:dependent => :destroy 
2

「追加された」コロンは、単に1.9でハッシュを表示する新しい一般的な方法です。

dependent: :destroyが一方:dependent => :destroy

と同じものであり、「付加」コロンは、Rubyにおけるシンボルデータタイプを示します。

5

Rubyはあなたがカッコ()を省略することができますし、いくつかのケースでカーリー{}ブレースそれは非常に明白ではないかもしれませんが、上記のコードは、実際にこのように見ているので:今

has_many(:models, { dependent: :destroy })

、そのhas_manyを意味し、 1つはシンボル:、不変の文字列、そしてdependentがキーでの値を持つハッシュの2つの引数をとります。また:dependent => destroyと見なすこともできます。

関連する問題