1

なぜこのコードは

Hash[*[[:first_name, 'Shane'], [:last_name, 'Harvie']].flatten] 

これを返す

{:first_name=>"Shane", :last_name=>"Harvie"}

について知っていArray#flattenます。しかし、*どういう意味ですか?それに関する情報を探すにはどうすればよいですか?

4

2 に答える 2

5

いわゆるスプラットオペレーターです。この場合、配列を取り、それを「展開」して、Hash.[]呼び出す引数のリストを生成します。基本的

Hash[*[[:first_name, 'Shane'], [:last_name, 'Harvie']].flatten] 

これに等しい

Hash[*[:first_name, 'Shane', :last_name, 'Harvie']] 

これはこれと同等です

Hash[:first_name, 'Shane', :last_name, 'Harvie'] 
于 2012-12-26T14:43:34.083 に答える
2

セルジオの答えに加えて、単純なスプラット演算子の例:

def foo(arg1, arg2)
  puts arg1
  puts arg2
end
args = ["bar", "baz"]

foo(args)
#=> ArgumentError: wrong number of arguments (1 for 2)

foo(*args)
#=> "bar"
#=> "baz"
于 2012-12-26T14:52:49.480 に答える