問題タブ [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.

0 投票する
1 に答える
603 参照

scala - Scala と暗黙的なクラスのインスタンス化

次の 2 つの Scala ファイルがあります。

と:

}

私が疑問に思っているのは、embelishString関数を複数回呼び出す必要がある場合、暗黙的StringWrapperなクラスの複数のインスタンスを作成することになるのでしょうか?

暗黙的を使用すると String ( ) が渡されるため、これが心配です-関数strのさまざまな呼び出し間で共有することに注意する必要があるのは「状態」ですか?embelishString

0 投票する
1 に答える
277 参照

scala - 暗黙的なパラメーターが型の推論を壊すか、推論が解決に不十分ですか?

この例では、暗黙的な順序付けの証拠を追加するまで、型推論は正常に機能します。型推論規則 (左から右へ & パラメーター リスト全体) は満たされているように見えますが、それを破る暗黙的なものがあります。

これはコンパイルされ、正常に動作します:

したがって、型推論は暗黙的な解決には不十分であるか、暗黙的な解決が型推論を破ります。

型は推測されていると思いますが、暗黙の解決が行われている場合、それは Nothing と見なされます。つまり、 で指定しOなかったかのように見なされます。バグですか?Intval result: Int

0 投票する
1 に答える
235 参照

scala - Scala での暗黙の優先順位の調整

DenseVector と配列の間の双方向の暗黙的な変換を定義する次の (作業中の) スニペットを検討してください。

試してみましょう:

今他の方向:

次も動作します: darr に注意してください。toSeq

ただし、.toSeq を省略すると、暗黙の衝突が発生します。

ただし、「.toSeq」を明示的に配置しないことをお勧めします。

だから私の質問は次のとおりです: Predef.toSeqが明確な勝者になるように適切な優先順位を設定する方法-上で定義されたカスタムの優先度の低い暗黙の前に常に試行されましたか?

0 投票する
1 に答える
201 参照

scala - 暗黙の検索は、Scala でスーパータイプを見つけるための型推論を導きません

次のコードでは、 の証拠がR[A]ありB、 のサブタイプであるため、のタイプを推測して証拠を使用するAことを期待します。しかし、scalac はそうすることを拒否します。fooARA

私はこれを試しました:

しかし、それでもうまくいきません。

さて、私が定義すると:

推論は機能しますが、実際のコードでは TT を参照する必要があります。

編集: A の証拠を A コンパニオン オブジェクトに移動したので、この解決策はもう機能しないようです。現実的な設定では、証拠は常にコンパニオン オブジェクトにあり、暗黙の検索でそれを見つける必要があります。

別の解決策は、証拠を反変にすることですが、これは推論Nothingやその他の問題など、多くの問題を引き起こします (私の実際のコードは、この単純化された例よりも複雑です)。

どうすればこれを正しく機能させることができますか?

0 投票する
2 に答える
479 参照

scala - 共分散による暗黙の解決

次のコードFooが不変の場合は機能するのに、共変の場合は機能しないのはなぜですか? の共変バージョンは、 の呼び出しで引数に型がありますが必須Fooであるという型エラーを生成します。に対しても同様のエラーが生成されます。useF1Foo[T]F1useF2

分散注釈が から削除されたFoo場合、コードは機能します。に対するパターン マッチF1は、 という事実を明らかにするT = Intので、それxは型を持っていFoo[Int]ます。の引数でに変換するFoo[Int]ために、暗黙の変換関数が使用されます。についても同様です。Foo が共変である場合、このプロセスのどの部分が異なりますか? また、その理由は?F1useF1F2

一般に、GADT はサブタイプをより複雑にしますが、この場合、考えられる具象型はFoo[Int]との 2 つだけでありFoo[Unit]、それらの間にサブタイプの関係は成り立たないため、サブタイプはこの例に影響を与えるべきではありません。