こんにちは。たいら(@tairaengineer2)です。
転職を繰り返し現在4社経験している、10年目エンジニアです。
この記事では、 Rubyを実行したときに出力されるエラーのwrong number of arguments (given x, expected y)について
- エラーの意味と原因
- エラーのサンプルプログラム
- エラーの解決策
と、この記事で丁寧に解説していきます。
前提条件
この記事で使っているRubyのバージョンは、2.6.6です。
Rubyのインストールは、下の記事をご参考ください。
wrong number of arguments (given x, expected y)の意味と原因
wrong number of arguments (given x, expected y)の意味は、メソッドの引数が異なる、という意味です。
つまり、呼び出したいメソッドに与えるべき引数が少ない、または多い状態に出力されるエラーです。
givenとexpectedの数字は以下の意味があります。
↑は、メソッドに与えられた引数は1つだった(given)が、本来ならば引数は何もないことが正しい(expected)、という意味です。
次章では、実際にエラーが出力されるサンプルプログラムで解説していきます。
エラーになるサンプルプログラム
宣言しているメソッドの引数より1つ多く引数を与えて、その結果を確認するプログラムです。
1 2 3 4 5 6 7 8 9 10 |
# wrong number of argumentsサンプルプログラム class WrongnumberSample def wrongarg puts "テスト" end end wrongsample = WrongnumberSample.new wrongsample.wrongarg("サンプル") |
実行結果
Rubyプログラムを実行するやり方は、以下の記事をご参考ください。
Traceback (most recent call last):
1: from wrongnumbersample.rb:10:in<main>'
wrongarg’: wrong number of arguments (given 1, expected 0) (ArgumentError)
wrongnumbersample.rb:3:in
3行目のwrongargメソッドでエラーが起き、想定通り与えている引数が1つ多い、とエラーが表示されました。
エラーの解決策
エラーの解決策はエラーメッセージに書かれている行のメソッドの引数に関わる箇所を修正することです。
上記の例だとwrongnumbersample.rbの3行目です。
修正の仕方として
- 呼び出している側で、与える引数を調整する
- 宣言している側で、メソッドの引数を調整する
の2パターンあります。
それぞれのパターンで、先ほど使ったサンプルプログラムを修正していきます。
解決策1:呼び出している側で、与える引数を調整する
解決策1の修正サンプルは以下になります。
1 2 3 4 5 6 7 8 9 10 |
# wrong number of argumentsサンプルプログラム class WrongnumberSample def wrongarg puts "テスト" end end wrongsample = WrongnumberSample.new wrongsample.wrongarg |
wrongargメソッドを呼び出すときの引数を変更しました。
これでエラーとならず、以下のように出力されます。
解決策2:宣言している側で、メソッドの引数を調整する
解決策2の修正サンプルは以下になります。
1 2 3 4 5 6 7 8 9 10 |
# wrong number of argumentsサンプルプログラム class WrongnumberSample def wrongarg(str) puts "#{str}" end end wrongsample = WrongnumberSample.new wrongsample.wrongarg("サンプル") |
wrongargメソッドの引数を変更しました。
これでエラーとならず、以下のように出力されます。
まとめ:エラーメッセージ「 wrong number of arguments (given x, expected y)」が表示されたときはメソッドの引数を確認しよう!
以上がエラーメッセージ「 wrong number of arguments (given x, expected y)」についての解説でした!
もしこのエラーが表示されたときは、メソッドの引数に着目して修正してみてください!
あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ
コメント