私は現在のコンテキストで暗黙的に利用可能にしたい項目(この場合はスプレーマーシャラ)をList
持っています。ちょうど明確にする:私はList
自体が暗黙的に利用可能ではないが、リストの各要素を望んでいません。誰かがこれを行うにはトリックを持っていますか?あるいは、実際には不可能なのは、コンパイル時に正確なimplicitsが利用可能でなければならないからですか?Scala Listのコンテンツを暗黙的に利用できるようにするにはどうすればよいですか?
答えて
この特定のケースでは、私が正しく理解していれば、特定のすべてのマーシャラーをコンテキストで利用できるようにする必要があるため、暗黙的にそれぞれを提供する必要があります。
オブジェクトにオブジェクトを配置し、それらを暗黙の値として定義する必要があります。
object Protocol {
implicit val marshaller1: ...
implicit val marshaller2: ...
}
その後、Protocol
オブジェクトをインポートすることで、あなたはすべてのあなたのマーシャラーが暗黙的に利用できるだろう。
あなたの質問に答えるために、はい、暗黙のうちに暗黙のうちに解決されます。したがって、特定のマーシャラーを使用する必要があるときはいつでも、暗黙の解決アルゴリズムは特定のマーシャータイプのvalue
を探します。あなたがリストからそれを得ることができない理由はこれであり、あなたはこれをどちらの方法でも望んではいけません。
これは、さまざまなマーシャラが異なるタイプとして宣言されている場合にのみ機能します。上記のコメントを参照してください。あなたが同意しない場合は、機能するコードを提供してください。 – WillD
あなたの答えは私が私の解決策で間違った軌道に乗っていたことに気づきました...私の感覚に来てくれてありがとう;) –
@ Jan-Pieter私は本当にうれしいです。 –
あなたは確かに型崩れしてこれを実現することができます
import shapeless._
import shapeless.ops.hlist.Selector
case class A()
case class B()
case class C()
val list : A :: B :: C :: HNil = A() :: B() :: C() :: HNil
def screamIfAccessible[T](implicit selector: Selector[A :: B :: C :: HNil ,T]) = {
selector(list) // Actually picks the T type element
// from the HList to work with
println("YAY!")
}
screamIfAccessible[A]
screamIfAccessible[B]
Shapeless - Generic programming with scala
リスト(あるいはこの場合はHList)からタイプAの要素にアクセスする必要がある、あなたのコード内の任意の方法をする必要がありますSelector
暗黙の引数を持っています
- 1. Scala - 暗黙的な値クラスを別のスコープで利用できるようにする
- 2. Coqで暗黙の引数を明示的に指定するにはどうすればよいですか?
- 3. 暗黙のうちにクラスをboolに変換できるようにするのは慣用的ですか?
- 4. Sharepoint/Webサイトをオンラインで利用できるようにするにはどうすればよいですか?
- 5. クロスドメインアクセスでWebサービスを利用できるようにするにはどうすればよいですか?
- 6. @current_userをform.html.eexで利用できるようにするにはどうすればよいですか?
- 7. オンラインでアプリを利用できるようにするにはどうすればよいですか? [Python]
- 8. このコードを再利用できるようにするにはどうすればよいですか?
- 9. REORG TABLEは暗黙的にトランザクションをコミットするようです
- 10. HTMLページがプログレッシブレンダリングを利用できないようにするにはどうすればよいですか?
- 11. ScalaのforeachでJava Listを使用するにはどうすればよいですか?
- 12. Num型のクラス強制によるインスタンスは、どのようにFractionalに暗黙的にできますか?
- 13. C#で暗黙の "this"を無効にするにはどうすればよいですか?
- 14. Scalaでプリミティブを使用するにはどうすればよいですか?
- 15. 暗黙的に(var)を入力するのではなく、静的変数を明示的に入力するにはどうすればよいですか?
- 16. CALayerの 'position'プロパティに暗黙のアニメーションを追加するにはどうすればよいですか?
- 17. どのように暗黙のいずれかを禁止するには?
- 18. 暗黙のUIViewアニメーションを有効にするにはどうすればよいですか?
- 19. Androidでタイマーを利用するにはどうすればよいですか?
- 20. Bloggerでブラウザキャッシングを利用するにはどうすればよいですか?
- 21. Flashでこの暗黙の強制エラーを修正するにはどうすればよいですか?
- 22. Scala List [org.bson.Document]をJSON文字列に変換するにはどうすればよいですか?
- 23. IntelliJオートコンプリートに暗黙的な変換/クラスをデフォルトで含めるにはどうすればいいですか
- 24. コンテンツにアクセスすることができないように、サイトのユーザーコンテンツを暗号化するにはどうすればよいですか?
- 25. DateTimeから暗黙的に暗黙的に暗黙的に暗黙的に暗黙的に暗黙的に暗黙的に暗黙変換に変換することができません
- 26. 暗黙のClassTag [T]からClass [T]を取得するにはどうすればよいですか?
- 27. どのように暗黙的に型平等を証明する?
- 28. List.scalaからタイプAのtoListを利用するにはどうすればよいですか?リストのソースで
- 29. 0-ary関数がScalaで暗黙的に呼び出されないようにする
- 30. 暗黙的に変換するときに暗黙のany2stringaddシンボル
どこで/どのように使用するのかのコード例はありますか? – Soapy
タイプごとに、暗黙検索で1つのインスタンスしか選択できません。複数のインスタンスが利用可能で暗黙の検索で選択できない場合は、 'error:ambiguous implicit values'を取得します。 'List [T]'のすべての要素は 'T'型です。では、どうしたらうまくいくのでしょうか? –
さらにいくつかのコンテキスト:ユーザーがHTTP APIの複数のバージョンを使用できるようにするライブラリの一部としてディレクティブを作成しようとしていました。この指令は、適切なマーシャラーを対象とします。しかし、このソリューションは、コンパイル時と実行時のロジックw.r.tを組み合わせています。暗黙のうちに。私は今、別のパスを選択しました。元のものを置き換え、マーシャラーの暗黙のリストを引数として取るカスタムの 'complete'ディレクティブです。このディレクティブは、正しいマーシャラーを選択し、応答を作成します。魅力的な作品!あなたの貢献に感謝します! –