22

多くの場合、Scala の暗黙の引数に注意を払う必要はありませんが、コンパイラがどのようにそれらを自動的に提供しているかを理解しておくと非常に役立つ場合があります。残念ながら、この理解を得るのは難しいようです!

特定のコードで、暗黙的なパラメーターがどのように提供されているかを発見する一般的な方法はありますか?

理想的には、いつの日か IDE 統合によって何らかの形でこの情報が提供されるようになるでしょうが、今のところはさらに深く掘り下げる必要があると思います。任意の時点でコンパイラが選択する暗黙の定義を正確に説明するようにコンパイラに依頼する方法はありますか? これは、他のコンパイラ出力から間接的に解読できますか?

例として、スタック オーバーフローでこのような質問を読まずに、へのimplicit bf: CanBuildFrom[Repr, B, That]引数がどこから来るのかを自分で解決する方法を知りたいです!TraversableLike.map

4

2 に答える 2

17
  1. このオプション-Xprint:typerを scalac コマンド ラインに追加します。これにより、typer コンパイラ フェーズの直後にプログラム ツリーが出力されます。これは、短い自己完結型の例で最も効果的です。これを scalac に渡すこともできます。これは、Scala の自立に向けた本当に大きな一歩です!
  2. Randall が述べたように、IntelliJ はスコープ内と選択された Implicit View を で表示しCTRL-ALT-SHIFT-Iます。1 か月か 2 か月待てば、暗黙の引数も同様にサポートされる可能性があります。
于 2010-07-05T13:45:38.830 に答える
7

理想的には、いつの日か IDE 統合によって、何らかの方法でこの情報が提供される...

その日は今日、JetBrains の IDEA と共にあります。Scala プラグインの最近のナイトリー リリースで IDEA バージョン 9 (9.0.3 EA #95.289) の最新の EAP を実行する場合、この機能が存在します。すべての値式を選択してコマンドを発行すると、適用可能なすべての暗黙的な変換を示すポップアップが表示され、コンパイラが選択する変換が強調表示されます。

そして、どうやらそれをまだ知らない人が数人いるようなので、IDEA の無料でオープンソースの Community Edition があり、Scala プラグインをサポートしています。

于 2010-07-05T13:37:19.073 に答える