【Rails】wrong number of arguments (given A, expected B)の意味

rails

こんにちは。てくてーくです。

wrong number of arguments (given A, expected B)の意味について解説していきます。

この記事を書いた目的

アプリ開発中にこのエラーが発生し、詳しく調べてみました。同じようなエラーで困っている人の助けになれば幸いです。

どんなエラーか

“wrong number of arguments (given A, expected B)” は直訳すると

「引数の数が違っている(与えられた引数(A)、期待されている引数(B))」

※arguments・・・引数

つまり、与えられた引数と期待されている引数の数にズレが生じているということです。

class User
  def hoge(num1, num2) #期待されている引数(第1仮引数,第2仮引数)
    p num1
    p num2
  end
end

@user = User.new
@user.hoge(1,2) #与えられた引数(第1引数,第2引数)
1
2
=> 2

与えられた引数(given A) とは

与えられた引数(given A)とは呼び出し側の引数となります。

呼び出し側の引数とは自分が用意したメソッドを使うのに設定した数や文字列を指します。

上の例でいうと下に示したものが呼び出し側の引数になります。

@user.hoge(1,2) #与えられた引数(呼び出し側の引数)(given A)

期待されている引数(expected B)とは

期待されている引数(expected B)とはメソッド側の引数となります。

メソッド側の引数とは自分が用意したメソッドに使用する引数となります。

上の例でいうと下に示したものがメソッド側の引数になります。

def hoge(num1, num2) #期待されている引数(メソッド側の引数)(expected B)

エラー発生のメカニズム

どうしたらこのエラーが発生するのかを示してみます。

class User
  def fuga(num1, num2) #期待されている引数(メソッド側の引数)(expected B)
   p num1
   p num2
  end
end

user = User.new
user.fuga #与えられた引数(呼び出し側の引数)(given A)
ArgumentError: wrong number of arguments (given 0, expected 2)

エラーが発生しました。

ArgumentError: wrong number of arguments (given 0, expected 2)

(given 0, expected 2)は期待されている引数の数が2に対して、与えられた引数が0ということです。

具体的にいうと

def fuga(num1, num2) #期待されている引数(メソッド側の引数)(expected B)
.
.
.
user.fuga #与えられた引数(呼び出し側の引数)(given A)

の部分で def fuga(num1,num2)で引数を2つ示しているのに対し

user.fuga では引数を呼び出していないためこのエラーが発生しました。

では与えられた引数(呼び出し側の引数)を変えてみましょう。

user.fuga("gafu")

ArgumentError: wrong number of arguments (given 1, expected 2)

次は与えられた引数(呼び出し側の引数)に”gafu”を与えてみました。すると

(given 1, expected 2) というようにエラーの表示が変わりましたね。

与えられた引数(呼び出し側の引数)に一つの引数”gafu”を与えましたのでgiven 1となりました。

まとめ

  • “wrong number of arguments (given A, expected B)” のエラーは引数の数が呼び出し側とメソッド側で合っていないというエラーであること。
  • given A は与えられた引数(呼び出し側の引数)であること。
  • expected B は期待されている引数(メソッド側の引数)であること。
  • エラーを解消するには given A または expected Bのどちらかに引数の数を合わせること。

コメント