Elixir: BadArityError
Elixirで関数に渡す引数の数が間違っている場合のエラー
概要
Elixirで無名関数やキャプチャした関数を、定義されたアリティ(引数の数)と異なる数の引数で呼び出した場合に発生するエラーです。
エラーメッセージ
** (BadArityError) #Function<0.12345678/1 in MyModule.my_function/0> with arity 1 called with 2 arguments (1, 2)
原因
- 引数の数の不一致: 関数が期待する引数の数と渡した数が違う
- 関数キャプチャのアリティミス: &Module.function/n のnが間違っている
- 高階関数への渡し方: Enum.mapなどに渡す関数のアリティが違う
解決策
1. 無名関数のアリティを確認
| |
2. Enum関数に渡す関数のアリティ
| |
3. 関数キャプチャのアリティ指定
| |
4. reduce_while のパターン
| |
5. Task.async で関数を渡す
| |
6. GenServerコールバックのアリティ
| |
7. 関数情報を確認
| |
8. デフォルト引数でアリティを柔軟に
| |
よくある間違い
- Enum.each と Enum.map で期待されるアリティの混同
- Stream関数のアリティ
- with_index を使う場合のタプル引数
- 関数を変数に束縛する際のキャプチャ忘れ
Elixir の他のエラー
この記事は役に立ちましたか?