Scala: MatchError
Scalaでパターンマッチが網羅的でない場合のエラー
概要
Scalaのパターンマッチで、与えられた値がどのケースにも一致しない場合に発生するエラーです。
エラーメッセージ
scala.MatchError: someValue (of class SomeClass)
原因
- 網羅的でないパターンマッチ: すべてのケースをカバーしていない
- sealed traitの拡張: 新しいサブクラスを追加したがパターンを更新していない
- Optionのアンラップ: Some/Noneの両方をハンドルしていない
解決策
1. デフォルトケースを追加
| |
2. sealed trait で網羅性チェック
| |
3. Option を安全に処理
| |
4. Either を安全に処理
| |
5. Try を安全に処理
| |
6. コンパイラ警告を有効化
| |
7. 部分関数を明示的に使用
| |
よくある間違い
- 列挙型に新しい値を追加したが全てのmatchを更新していない
- case classの抽出でフィールドがnullの場合を考慮していない
- Listのパターンマッチで空リストを考慮していない
Scala の他のエラー
この記事は役に立ちましたか?