2009-05-27 14 views
3

これらの2つのステートメントは、同じタイプの引数(ハッシュ)を新しいメソッドに渡しますか?Rubyハッシュの括弧構文

@seat = Seat.new(:flight_id => @flight.id) 

@seat = Seat.new({:flight_id => @flight.id}) 

ハッシュブラケット{}は2番目の例で何か変更されますか?

答えて

12

{}は両方とも同じですが、2番目の引数には何も追加しません。それよりも明示的にすることは別です(=>構文を使用すると、これは誰でもハッシュですルビーの任意の長さ)。ハッシュへ

someFunction(:arg1 => value1, :arg2 => value2) 

とあなたのための1つの引数として渡し:

Rubyは自動的に同じようなパラメータのリストをオンにします。ハッシュの周りに{}を追加する必要があるときは、ハッシュのハッシュや2つのハッシュを必要とする関数(オプションとhtml_optionsの両方を渡す必要がある複数の方法など)があるときです:

someFunction({:arg1 => value1, :arg2 => value2}, {:arg3 => value3}) 

2つのハッシュで渡されます(インタープリタは、2つのハッシュが分割されている場合、そのハッシュがどこに割り振られているかを推測することができないため、この場合は{}を渡す必要があります) )

詳細については、Pickaxeの書籍の章:More About Methodsの下部にある「ハッシュ引数の収集」のセクションを参照してください。

1

これは、(あなたの例を使用して)括弧内の別のアイテムにカンマを使用して、別の代替構文を言及するには良い場所のように思える:

@seat = Seat.new({:flight_id, @flight.id}) 

私は通常、標準コードにコンマ構文を使用していません - - workmad3のように、矢印(=>)はハッシュをより明白にします。しかし、対話型のRubyのセッション(IRB)で、それは矢よりもコンマを入力する方が簡単です:

{:eyes, "blue", :height, 6.2} # => {:height=>6.2, :eyes=>"blue"} 

とRuby 1.9で、慣用バージョンはさらに少ないカンマがあります

{eyes: "blue", height: 6.2} 
+0

ええ覚えています2番目の例の構文はすべての実行可能なルビバージョンで削除されています(1.8はすぐにEOLされる予定です) –

関連する問題