問題タブ [scala-implicits]
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 - Scala: enforcing precedence of an implicit declared in a trait
There are countless questions on this topic and a quite good, if not very precisely worded article here: Revisiting implicits without the import tax. I've read most of them, but have a problem with overriding default CanBuildFrom
implicits without repeating the declarations myself. If you're familiar with scala collection library and resolution of CanBuildFrom
, you know that for every scala collection trait CC[X]
, its companion object defines an implicit CanBuildFrom[CC[_], X, CC[X]]
instance. I have introduced my own collection hierarchy, rooted in a class derived from IndexedSeq[X]
:
Can I avoid declaring implicit values in companion objects of all defined traits and instead extract them to a common base trait for the companion objects? I tried having:
Unfortunately, those definitions aren't considered more specific than the one declared in object IndexedSeq
. This issue is aggreviated by the fact that in reality it's not a single implicit value, but several with increasing level of requirements for X
.
scala - StringContext を使用した汎用文字列インターポレーター
単純なカスタム文字列インターポレーターを作成しようとしていますが、型パラメーターを使用しない限り成功します。
これを機能させることはできますか?私はこれら 3 つのタイプを定義していないため、パラメトリック ポリモーフィズムを使用できません。
その疑似コード パターン マッチの型レベルで同等のものは何ですか?
最新の試み
私の最近の試みは暗黙的に使用することでしたが、そのような暗黙的なものはありません! 型推論に従って、コンパイラが返してほしい型を取得することに実際に興味があります。
scala - 2 つの暗黙的変数を使用して scala で変数を定義する
twitter で scalaLang による興味深い投稿を見つけました。このコードがコンパイルされて動作する場所
誰かがそれがどのように機能しているのか説明してもらえますか? 暗黙のドキュメントを読みましたが、このようなケースは見つかりませんでした。ここで何が起こっているのか説明してください。
どんな助けでも大歓迎です!
scala - 暗黙のパラメータが暗黙の変換になるのを避ける
次のコードの意図した出力は、数字0
.
実際の出力は例外です。
調査の結果、 、 、 に提供された暗黙的なパラメーターが、 からの暗黙的な変換として意図せずに機能するようにするMap
実装が示されています。apply(string): Int
doWork
massTable
String => Int
その結果、上記の呼び出しは、によって提供されるメソッドではなく、タイプtoInt
の合成メソッドになります。toInt
Int
toInt
StringOps
この種の問題を回避し、目的の出力を達成するための最良の方法は何ですか?