hash に **

*Splat Operator)は配列を展開する演算子

**Double Splat Operator)はハッシュを展開する演算子です。

array = [1, 2, 3] hash = {a: 1, b: 2} [a, b, array, c] #=> [a, b, [1, 2, 3], c] [a, b, *array, c] #=> [a, b, 1, 2, 3, c] {A: 10, B: 11, hash, C: 12} #=> SyntaxError {A: 10, B: 11, **hash, C: 12} #=> {A: 10, B: 11, a: 1, b: 2, C: 12}

オプション引数

可変長引数に類似の引数です。引数にキーとバリューの組み合わせを指定したい場合に使用します。引数は可変長です。
def greet(**args) args.each do |arg| puts "#{arg[0].capitalize} is #{arg[1]}." end end greet(name: "Taro", age: 10) #=> "Name is Taro." "Age is 10."
引数の前に**を付けます。これで複数のキーとバリューの組み合わせをハッシュとして受け取れます。指定するキーはなんでも良いので使い道は限定されると思います。あらかじめキーだけは指定しておくキーワード引数の方が使用頻度は高いと思います。


hash を綺麗に展開してくれる

キーワード引数とかで関数にハッシュを渡すときは展開してあげよう

> hash1 = { id: 1, type: 'hoge' } => {:id:=>1, :type=>"hoge"} > hash2 = { test: 1 } => {:test=>1} > hash3 = { hash1, hash2 } SyntaxError: unexpected ',', expecting => hash3 = { hash1, hash2 } ^ > hash3 = { hash1: hash1, hash2: hash2 } => {:hash1=>{:id:=>1, :type=>"hoge"}, :hash2=>{:test=>1}} > hash3 = { **hash1, **hash2 } => {:id:=>1, :type=>"hoge", :test=>1}