回答:
*
あるスプラットのオペレーター。
これは、Array
引数のリスト、この場合はHash.[]
メソッドの引数のリストに展開されます。(より正確には、to_ary
/ to_a
、またはto_a
Ruby 1.9 で応答するすべてのオブジェクトを展開します。)
たとえば、次の2つのステートメントは同じです。
method arg1, arg2, arg3
method *[arg1, arg2, arg3]
また、別のコンテキストで使用して、メソッド定義の残りのすべてのメソッド引数をキャッチすることもできます。その場合、それは拡張しませんが、結合します:
def method2(*args) # args will hold Array of all arguments
end
splatオペレーターは、関数に渡された配列をアンパックして、各要素が個別のパラメーターとして関数に送信されるようにします。
簡単な例:
>> def func(a, b, c)
>> puts a, b, c
>> end
=> nil
>> func(1, 2, 3) #we can call func with three parameters
1
2
3
=> nil
>> list = [1, 2, 3]
=> [1, 2, 3]
>> func(list) #We CAN'T call func with an array, even though it has three objects
ArgumentError: wrong number of arguments (1 for 3)
from (irb):12:in 'func'
from (irb):12
>> func(*list) #But we CAN call func with an unpacked array.
1
2
3
=> nil
それでおしまい!
みんなが言うように、それは「感嘆符」です。Ruby構文を探すことは不可能であり、私はこれを他の質問で尋ねました。質問のその部分に対する答えは、あなたが検索することです
asterisk in ruby syntax
Googleで。グーグルはあなたのためにそこにあります、あなたが見るものを言葉に入れてください。
Anyhooは、多くのRubyコードと同様に、そのコードはかなり密集しています。の
line.split(/=|;/)
SIX要素の配列を作成しfirst_name, mickey, last_name, mouse, country, usa
ます。次に、スプラットを使用してそれをハッシュにします。すべてがRubyで公開されているため、Rubyの人々は常にSplatメソッドを確認するように要求します。私はそれがどこにあるのかわかりませんが、それを取得するfor
と、配列を実行してハッシュを構築することがわかります。
コアドキュメントでコードを探します。見つからない場合(私は見つけられませんでした)、次のようなコードを記述しようとします(動作しますが、Rubyのようなコードではありません)。
line = "first_name=mickey;last_name=mouse;country=usa"
presplat = line.split(/=|;/)
splat = Hash.new
for i in (0..presplat.length-1)
splat[presplat[i]] = presplat[i+1] if i%2==0
end
puts splat["first_name"]
そして、Rubyギャングは、なぜあなたのコードがばかげているか、悪いか、または単に間違っているかをあなたに伝えることができます。
ここまで読んだなら、初期化のためにハッシュのドキュメントを一読してください。
基本的に、いくつかの引数で初期化されたハッシュは、キーと値のペアとしてそれらを作成します。
Hash["a", 100, "b", 200] #=> {"a"=>100, "b"=>200}
したがって、あなたの例では、これは次のハッシュにつながります:
{"first_name"=>"mickey", "last_name"=>"mouse", "county"=>"usa"}
a,b,*c = d,e,f,*g
、a = d、b = e、c = [f、g0、g1、g2、...、gn]を設定します。ここで、g = [g0、g1、g2、...、gn]