どのような(単項)*オペレーターがこのRubyのコードについて教えてください。

StackOverflow https://stackoverflow.com/questions/918449

  •  06-09-2019
  •  | 
  •  

質問

さらにRubyのコード

line = "first_name=mickey;last_name=mouse;country=usa" 
record = Hash[*line.split(/=|;/)] 

理解していくのかに * オペレーター-何でこのドキュメンテーションに。というのを探しの場合は証明ハード...)

役に立ちましたか?

解決

*のスプラットの演算子ます。

これは、この場合には、引数のリストにArrayメソッドの引数のリストをHash.[]を拡張します。 (より正確には、それはルビー1.9 / to_ary、又はto_ato_aに応答する任意のオブジェクトを拡張する。)

説明するために、以下の2つのステートメントは同じである

method arg1, arg2, arg3
method *[arg1, arg2, arg3]

また、メソッド定義に残りのすべてのメソッドの引数をキャッチするために、異なるコンテキストで使用することができます。その場合には、それが展開するが、結合しない。

def method2(*args)  # args will hold Array of all arguments
end
ここを

いくつかのより詳細な情報を表示します。

他のヒント

各要素は、個々のパラメータとして関数に送信されるように、

スプラット演算子は、関数に渡された配列をアンパックします。

簡単な例:

>> 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

それはそれだ!

としてのみ言及していまsplat".みRubyの構文は不可能で、またこの他の質問をします。の答えの問題で検索

asterisk in ruby syntax

Google.Googleで確認していくしかありませんで入れていました。

Anyhooのように、多くのRubyコード、コードは非常に緻密.の

line.split(/=|;/)

からなる配列の要素 first_name, mickey, last_name, mouse, country, usa.その後、splatて使用されるハッシュ.現在のRuby人が常時送信、Splat方法、それらのRubyなどがある。わたしにはわかりませんがまさしくその通りなのだが、そのままだと運 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"}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top