問題タブ [generic-derivation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - 封印された特性をキー タイプとしてマップをシリアル化できない
このタイプのフォーマットを指定できないようです:
封印されたトレイトとサブタイプのシリアル化、および Foo 型の通常の Play JSON フォーマット用。
しかし、私はこの問題を抱えています:
play-json-derived-codecs lib が Baz タイプのフォーマットを提供し、それで十分だと思いました。Foo が次のように変更された場合
すべてが良いです。
scala - 派生または既存の暗黙的な値からインスタンスを提供するための Scala 型クラス
私は Scala で汎用プログラミングを始めており、サードパーティのシリアル化 (circe、upickle など) またはスキーマ (tapir など) に変換できる柔軟なビルド可能なスキーマ タイプ (ADT の一般的な記述) を設計しようとしています。 ) クラスのインスタンスを入力します。製品と副産物のスキーマを構築する場合、サブコンポーネントのスキーマを解決できる必要があります。
これを実現したい方法は、型クラスを使用することです。型クラスは、を解決するか、既存の暗黙的なインスタンスを解決することProvider
によって、特定の型のインスタンスを「提供」します。Deriver
派生プロバイダーの優先順位を下げることで、派生よりもインスタンスを優先する必要があります。
以下は、より単純なケースに適用された私のソリューションのバージョンです:NamesFor[T]
タイプ T の抽出されたフィールド名を含むインスタンスを生成します。
次の 2 つの方法でインスタンスを派生させることができます。
NamesFor[T]
1: 既存のインスタンスの暗黙のプロバイダー
NamesFor[T]
2: fromの暗黙の派生元T
しかし、スコープ内にNamesFor[T]
暗黙的なインスタンスを持たないプロバイダーを解決しようとすると失敗します。NamesFor[T]
つまり、provideDerivation
次の方法でインスタンスを解決できません。
これをすべて機能させる方法について何か考えはありますか?