LoginSignup
2
1

More than 5 years have passed since last update.

キーワード引数の引数にキーだけしか書かないとArgumentError

Posted at

キーだけしか書かない場合でも、勝手に値をnilにしてくれるかなと思ったけどそんなことはなかった。

キーだけしか書かない例

def foo(a:, b:123)
  p a
  p b
end
foo(b:456)
結果
4.rb:7:in `<main>': missing keyword: a (ArgumentError)

キーと値をどっちも書いた例

def foo(a:nil, b:123)
  p a
  p b
end
foo(b:456)
結果
nil
456

参考

パーフェクトRuby p.105 3-5-10 キーワード引数にも同じこと書いてあった。

def keywords(alice: nil, bob: nil) 
  {alice: alice, bob: bob}
end

keywords alice: 'アリス', bob: 'ボブ' 
# => {:alice=>"アリス", :bob=>"ボブ"}

keywords
# => {:alice=>nil, :bob=>nil}

キーワード引数にはデフォルト値を指定する必要があります。上記の例では各キーワード引数に nil を指定していました。何かデフォルト値を指定してみましょう。

# デフォルト値は仮引数に直接指定する
def keywords(alice: 'ありす', bob: 'ぼぶ') 
  {alice: alice, bob: bob}
end

keywords bob: 'ボブ' 
# => {:alice=>"ありす", :bob=>"ボブ"}
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1