Scala: could not find implicit value
Scalaで暗黙の値が見つからない場合のエラー
概要
Scalaで暗黙のパラメータや暗黙の変換に必要な値がスコープ内に見つからない場合に発生するコンパイルエラーです。
エラーメッセージ
could not find implicit value for parameter encoder: Encoder[MyClass]
または
No implicit Ordering defined for MyClass
原因
- インポート不足: 必要な暗黙の値をインポートしていない
- 型クラスインスタンス未定義: カスタム型に対するインスタンスがない
- スコープの問題: 暗黙の値が見えないスコープにある
- 型パラメータの不一致: ジェネリック型の型引数が合わない
解決策
1. 必要なインポートを追加
| |
2. 型クラスインスタンスを定義
| |
3. コンパニオンオブジェクトに配置
| |
4. 明示的に渡す
| |
5. implicitly で確認
| |
6. Scala 3 (given/using)
| |
7. 自動導出(magnolia/shapeless)
| |
よくある間違い
- 暗黙の値をprivateで定義している
- 型パラメータが具体化されていない(
Encoder[T]ではなくEncoder[List[T]]が必要) - 循環する暗黙の定義
- 優先順位の競合(複数の暗黙の値が候補になる)
Scala の他のエラー
この記事は役に立ちましたか?