茶漬けと玉子焼き

swiftとrubyの教室

Ruby のキーワード引数とは

Ruby のキーワード引数について、

キーワード引数とは

  • Ruby2.0から導入された
  • 引数のデフォルト値を設定できる
  • 引数を渡す順番を気にしなくてよい

などの特徴があります
では簡単な例を


デフォルトとは違う値を入れた場合

def test(a, b:2, c:3)
  p a + b + c
end
test(1, b:2, c:4)  # => 7

指定した引数がしっかり渡されています。


引数を指定しなかった場合

def test(a, b:2, c:3)
  p a + b + c 
end
test(1, b:2) # => 6

デフォルトの値が指定されています。

引数の順番なんか関係ない

def test(a, b:2, c:3)
  p a + b + c
end
test(1, c:3, b:2) # => 6

キーで指定しているため、順番は関係ありません。

デフォルト値は必須?

def test(a, b:2, c:, d:4)
  p a + b + c + d
end
test(1, b:2, c:3, d:4) # =>  syntax error, unexpected ','

デフォルト値はなくても良いとのことでしたが、
自分の環境(ruby2.0)ではデフォルト値は必須のようでした。

最後はキーワード引数じゃなきゃだめ

def test(a, b:2, c:3, d)
  p a + b + c + d
end
test(1, b:2, c:3, 5) # => syntax error, unexpected tIDENTIFIER

キーワード引数の後ろに
普通の引数を置くとエラーになります

ちょっと小技

def test(a, b:2, c:3, **d)
  p a + b + c + d[:hoge] + d[:fuga]
end
test(1, b:2, c:3, hoge: 10, fuga: 20) # => 36

引数の最後に**引数を設定することで、
設定していないキーワード引数を全て
ハッシュで取得し、エラーを出さなくなります。