Часто нет никакой потребности обратить любое внимание на неявные аргументы в Scala, но иногда очень полезно понять, как компилятор автоматически обеспечивает их. К сожалению, это понимание, кажется, трудно получить!
Существует ли общий метод обнаружить, как неявный параметр был обеспечен в данной части кода?
Идеально, однажды интеграция IDE предоставила бы эту информацию в некотором роде, но я ожидаю на данный момент, что я должен буду вырыть глубже. Там некоторый путь состоит в том, чтобы попросить, чтобы компилятор объяснил точно, какое неявное определение он выбирает в какой-либо данной точке? Это может быть дешифровано косвенно от другого выхода компилятора?
Как пример, я хотел бы знать, как удаться самостоятельно где implicit bf: CanBuildFrom[Repr, B, That]
аргумент TraversableLike.map
прибывает из, не читая вопросы как этот на Переполнении стека!
-Xprint:typer
в командную строку scalac. Это выводит дерево программы сразу после фазы компиляции typer. Это лучше всего работает с коротким, самодостаточным примером. Вы также можете передать это в scalac. Это действительно огромный шаг к самостоятельности в Scala! CTRL-ALT-SHIFT-I
. Подождите месяц-другой, и неявные аргументы, вероятно, получат аналогичную поддержку. В идеале, когда-нибудь интеграция с IDE каким-то образом предоставит эту информацию ...
Сегодня настал этот день с IDEA JetBrains. Если вы запускаете последний EAP IDEA версии 9 (9.0.3 EA # 95.289) с недавним выпуском подключаемого модуля Scala, выпускаемым каждую ночь, эта возможность присутствует. Может быть выбрано каждое выражение значения и выдана команда, которая отображает всплывающее окно, показывающее все применимые неявные преобразования с выделенным компилятором.
И поскольку, очевидно, есть некоторые, кто еще этого не знает, существует бесплатная версия IDEA Community Edition с открытым исходным кодом, которая поддерживает подключаемый модуль Scala.