rspecのエラーを集めてたらキーワード引数に出会いました
rspecのエラー出しまくってたのと
キーワード引数が素敵過ぎたのでまとめ
rspecで遭遇したエラーたち
引数の個数がおかしい問題
ArgumentError: wrong number of arguments (4 for 0)
必要な引数が足りない問題
ArgumentError: missing keyword: id
- 引数のidが入ってないよって言われてるだけ
引数がおかしい問題
ArgumentError: Missing required keyword arguments: id
- キーワード引数なのに引数を渡す時にキーワード引数にしてなかった
- キーワード引数に直す
キーワード引数とは
- 引数に名前をつけれる
- ruby 2.0から
- 特定の引数だけ渡したりデフォルト値入れたりできる
# def メソッド名(変数名 : ) # def メソッド名(変数名 : デフォルト値) def hoge_method(id:, hoge: "hoge", size: 10) # id, hoge, sizeで使える end # 呼び出す側 # デフォルト値がないものを未指定だとエラー hoge_method(id:, hoge: "hoge", size: 10) # err # デフォルト値入ってるものの上書き可能 hoge_method(id: 1, hoge: "hoge", size: 20) # 一部の引数のみ指定でも可 # ただしデフォルト値がないものが抜けてるとエラー hoge_method(id: 1) # 順番入れ替え可 # ただしデフォルト値がないものが抜けてるとエラー hoge_method(id: 1, size: 20, hoge: "hoge") # 例 def get_items(id:, hoge: "fuga", size: 10) Item.find(id) end get_items(id: 1) get_items(id: 1, hoge: "piyo", size: 10) get_items(id: 1, hoge: "piyo") get_items(hoge: "piyo", id: 1)
わかりやすさと便利さはんぱない
ちなみに
# デフォルト値入ってないの指定し忘れちゃった ArgumentError: missing keyword: id # 存在しない引数を指定しちゃった ArgumentError: unknown keyword: no_such_keyword
になります
参考
キーワード引数 | TECHSCORE(テックスコア)
Ruby 2 Keyword Arguments
rkh.im | Ruby 2.1