Существует ли систематический способ обнаружить, какие неявные defs находятся в объеме, и какой связывается в конкретной точке?

Часто нет никакой потребности обратить любое внимание на неявные аргументы в Scala, но иногда очень полезно понять, как компилятор автоматически обеспечивает их. К сожалению, это понимание, кажется, трудно получить!

Существует ли общий метод обнаружить, как неявный параметр был обеспечен в данной части кода?

Идеально, однажды интеграция IDE предоставила бы эту информацию в некотором роде, но я ожидаю на данный момент, что я должен буду вырыть глубже. Там некоторый путь состоит в том, чтобы попросить, чтобы компилятор объяснил точно, какое неявное определение он выбирает в какой-либо данной точке? Это может быть дешифровано косвенно от другого выхода компилятора?

Как пример, я хотел бы знать, как удаться самостоятельно где implicit bf: CanBuildFrom[Repr, B, That] аргумент TraversableLike.map прибывает из, не читая вопросы как этот на Переполнении стека!

21
задан Community 23 May 2017 в 02:17
поделиться

2 ответа

  1. Добавьте опцию -Xprint:typer в командную строку scalac. Это выводит дерево программы сразу после фазы компиляции typer. Это лучше всего работает с коротким, самодостаточным примером. Вы также можете передать это в scalac. Это действительно огромный шаг к самостоятельности в Scala!
  2. Как упоминал Рэндалл, IntelliJ показывает in-scope и выбранный Implicit View с помощью CTRL-ALT-SHIFT-I. Подождите месяц-другой, и неявные аргументы, вероятно, получат аналогичную поддержку.
14
ответ дан 17 October 2019 в 02:00
поделиться

В идеале, когда-нибудь интеграция с IDE каким-то образом предоставит эту информацию ...

Сегодня настал этот день с IDEA JetBrains. Если вы запускаете последний EAP IDEA версии 9 (9.0.3 EA # 95.289) с недавним выпуском подключаемого модуля Scala, выпускаемым каждую ночь, эта возможность присутствует. Может быть выбрано каждое выражение значения и выдана команда, которая отображает всплывающее окно, показывающее все применимые неявные преобразования с выделенным компилятором.

И поскольку, очевидно, есть некоторые, кто еще этого не знает, существует бесплатная версия IDEA Community Edition с открытым исходным кодом, которая поддерживает подключаемый модуль Scala.

7
ответ дан 17 October 2019 в 02:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: