0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Ruby】キーワード付き引数と引数のデフォルト値について

Posted at

##はじめに
バージョン
ruby 2.6.3
rails 5.2.3

キーワード付き引数についてよく理解していなかったのでハマりました。
イコールを使ってただのデフォルト値付きのメソッドを定義していたにも関わらず、メソッド呼び出しの際にキーワード付き引数の呼び出し方をしていた為、意図しない引数が渡っておりエラーが発生していた。
###今回のミス

#デフォルト値付き引数でメソッドを定義
def hello(lang = "ja", place = "Japan")
 puts "#{lang} : #{place}"
end

#キーワード付き引数の呼び出し方
hello(lang: "en", place: "America")
#=>
{:lang=>"en", :place=>"America"} : Japan

引数がハッシュとして解釈されて意図しない引数が渡ってしまった。


###キーワード付き引数について
参考 https://qiita.com/jnchito/items/74e0930c54df90f9704c

def hello(lang: "ja", place: "Japan")
 puts "#{lang} : #{place}"
end

#引数なしの呼び出し
hello
#=>
ja : Japan

#キーワードありで引数の値を変更して呼び出し
hello(lang: "en", place: "America")
#=>
en : America

#キーワードのない引数で呼び出し
hello("en", "America")
#=>
wrong number of arguments (given 2, expected 0) 

キーワード付き引数を持つメソッドを引数なしで呼び出すとデフォルト値でメソッドが呼び出される。
キーワードのない引数で呼び出そうとするとエラーが発生する。

###デフォルト値を持つ引数について
参考 https://rooter.jp/programming/ruby_method_default/

def hello(lang = "ja", place = "Japan")
 puts "#{lang} : #{place}"
end

#引数なしの呼び出し
hello
#=>
"ja : Japan"

#キーワードのない引数で呼び出し
hello("en", "America")
#=>
en : America
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?