Как найти неявную функцию (и) с помощью метапрограммирования Scala?

В языке scala неявная область видимости класса стирается во время выполнения, например, если определяется:

case class A(i: Int)

object A {

  implicit def toInt(a: A) = a.i
}

Тогда для массива:

val arr = Array[Any](A(1), 2)

невозможно написать:

arr.map(_ + 3)

как тип A и его неявная область видимости удаляется после вставки в массив [Any].

Это делает невозможным применение некоторых шаблонов проектирования (например, поиск класса типов) во время выполнения (когда информация о типе все еще частично доступна). В моем случае я хотел бы написать вышеупомянутую программу без явного указания A в сопоставлении типов (так как в реальном случае количество классов, подобных A, может быть бесчисленным). Может ли какой-либо пакет метапрограммирования scala (предпочтительно scalameta) сделать это в одном проекте? Что я должен сделать, чтобы указать байт-коду времени выполнения Java "искать неявный класс выполнения, если он не найден, сделать что-то еще"?

0 ответов

Другие вопросы по тегам