2013-01-06 8 views
10

今日はRailsのコードを突っついたとthis snippetつまずい:Rubyで* ::(アスタリスクダブルコロン)は何をしますか?

new_date(*::Date._parse(string, false).values_at(:year, :mon, :mday)) 

*::Dateにアスタリスク-ダブルコロン(またはスプラット・ダブルコロンは、あなたがする場合は)何をしますか?

おそらくそれは特に名前空間を持つDateクラスのスコープと関係がありますが、標準のDateクラスを使用するのではなく、それを組み込むだけで十分です。

答えて

11

私は間違ったコードを読んでいました。これは「* ::」演算子ではありません。

はここで何が起こっているのかです:

  • が配列にハッシュを有効にする値
  • コールvalues_atのハッシュを取得するために、グローバルスコープ(::Date
  • コール_parse()Dateクラスを探す
  • アスタリスク演算子は、配列をメソッド呼び出しの複数の引数に変換する典型的な関数で使用します。
  • new_date()を呼び出し、year,mon、およびmday引数の配列要素を渡します。

オペレータ*::の間にスペースがないと、混乱することになります。 : - \

+3

最初の箇条書きは、 "**グローバル**スコープ内"とします。現在のスコープは '::'がなくてもかまいません。 – sepp2k

+0

@ sepp2k固定、ありがとう! –

+5

これは、時にはローカル変数を使用することが良いアイデアであるという優れた例です。 –

関連する問題