Найти все неявки

Есть ли способ в Scala найти и отобразить все применения implicits в моем коде или скомпилировать без имплицитов (так что я получаю ошибки компиляции)? Я надеюсь определить места, где я непреднамеренно выделяю дополнительную память во внутренних циклах.

Ответы

Ответ 1

Вы можете использовать опцию -Xprint:typer и посмотреть, как проверены внутренние петли, представляющие интерес. Неявные вызовы появятся в печатном исходном коде. Вам может потребоваться передать вывод в файл, чтобы вы могли искать интересные разделы.

Кроме того, ночные часы Scala Eclipse IDE на http://scala-ide.org/download/nightly.html имеют скрытую функцию отображения. Вы должны включить его в разделе "Настройки", Scala, "Имплициты".

Двойные стрелки в левом поле показывают, что используется неявное:

enter image description here

В режиме наведения он показывает детали:

enter image description here

Плагин IDEA Scala также может отображать неявные преобразования с подчеркиванием, см. один и тот же фрагмент кода:

enter image description here

Он также должен показать, какой из них используется с помощью сочетания CTRL-SHIFT-Q, но у меня было меньше успеха с ним...

Ответ 2

По состоянию на вчерашний день (это просто совпадение) есть -Xlog-implicit-conversion.

scalac -Xlog-implicit-conversions -d /tmp /scala/trunk/src/library/scala/util/Random.scala 
/scala/trunk/src/library/scala/util/Random.scala:115: applied implicit conversion from Int to ?{val to: ?} = implicit def intWrapper(x: Int): scala.runtime.RichInt
    for (n <- buf.length to 2 by -1) {
                  ^