RailsでRubyを学び始めたばかりですが、いつ「=>」を使用すべきか、いつ割り当てに「=」を使用すべきか疑問に思っています。移行時にシンボルに値を割り当てるために、ハッシュに「=>」を使用しているようですが、どこに線を引くかわかりません。
ありがとう!
RailsでRubyを学び始めたばかりですが、いつ「=>」を使用すべきか、いつ割り当てに「=」を使用すべきか疑問に思っています。移行時にシンボルに値を割り当てるために、ハッシュに「=>」を使用しているようですが、どこに線を引くかわかりません。
ありがとう!
シンボルは=>
ハッシュのみに使用されます。Ruby には、メソッド呼び出しの最後の引数として、周囲の中括弧を含めずにハッシュを渡すことができる機能があります。これは、キーワード引数に似たものを提供します (ただし、Ruby 2.0 まで、Ruby にはキーワード引数がありませんでした)。
したがって、これを見ると:
t.integer :foo, :default => 5
それが本当に意味することはこれです:
t.integer(:foo, { :default => 5 })
残りは、見栄えを良くするために設計された単なる構文糖衣です。
一方=
、シンボルは、ほぼすべてのプログラミング言語でお馴染みの代入演算子です。
私はしばらくこれに苦労しましたが、今では可能な限りハッシュに新しいスタイルを使用することを好みます
t.integer :foo, default: 5
t.string :bar, default: 'Dave'
=> は代入と同じではありませんが、混乱する理由はわかります。ハッシュでは、キーと値をペアとして作成します。キーと値は何でもかまいません
{'key1' => 'some value', :symbol_key => 'other value'}
これは代入とは異なります。上記のハッシュをプログラムで引き続き使用できるようにするには、それをメソッドに渡すか、変数に代入する必要があるため、明確に確認できます。
myhash = {'key1' => 'some value', :symbol_key => 'other value'}
そして、ハッシュから何かを取得できるのは今だけです
puts myhash['key1']
したがって、 => 演算子は実際にはハッシュ (または辞書オブジェクト) を構築するために使用され、代入によりプログラムに値を格納できます。
Rails (およびマイグレーション) で非常に一般的に起こっているのは、ハッシュが作成され、気付かないうちにメソッド呼び出しに渡されていることです。しかし、配管は同じで、作成されるのはハッシュだけです。
Ruby 1.9 では、JavaScript のような構文を使用してハッシュを定義できるようになったため、これも見られるようになるかもしれません。
myhash = {key1: 'some value', key2: 'other value'}