Я работаю над библиотекой, которая нуждается в отражении и нуждается в специфической для Scala информации, а не в том, что доступно через стандартный API отражения Java.Прямо сейчас я использую недокументированный код в scalap (эквивалент Scala для javap) и пытаюсь связать предоставляемые им данные с объектами отражения Java, чтобы я мог вызывать методы и тому подобное (scalap просто анализирует файлы классов).
Я нашел это, но там ничего нет ... https://github.com/dubochet/scala-reflection
... и я искал в его репозитории Scala SVN его следы и тоже не смог его найти (но это могло бытьЯ просто пропустил это.)
Кто-нибудь знает библиотеку отражений Scala, которая предоставляет информацию, аналогичную предоставляемой скальпом, но также позволяет вызывать методы, поля доступа и т. Д., Например, библиотеку отражений Java?
[Редактировать]
Полагаю, мне следует более четко объяснить, что я пытаюсь сделать ...
Я хочу написать библиотеку, которая будет принимать файл, скажем, текст с разделителями.файл или рабочий лист в файле Excel, с заголовками вверху и манифестом, и возвращают Seq объектов.Таким образом, в основном функция выглядит следующим образом:
def parseFile[T](fileName: String)(implicit manifest: Manifest[T]): Seq[T] = {
// lots of magic ...
}
В общем случае это, вероятно, невозможно, и я уверен, что есть много «возможных» случаев, которые чрезвычайно сложны, ноЯ думаю, что есть полезное подмножество, которое может быть реализовано без особых сложностей, как только я получу представление о скальпе (или scala.reflect, они похожи, но различны ...) и объединю его с нужными объектами в API отражения Java.Мой основной план состоит в том, чтобы посмотреть на заголовки файла, посмотреть на имена параметров и типы открытых конструкторов и применить методы к объекту-компаньону, выбрать тот, который лучше всего соответствует файлу, и проанализировать файл на объекты.Это для чего-то ближе к сценариям, чем для создания приложений.Поэтому я в основном просто пытаюсь создать что-то, что сэкономит мне время.
Поэтому библиотека, которую я пишу, не имеет ни априорных знаний ни о классах, которые она создает, ни о чем-либо, выходящем за рамки базовой структуры (текст в виде таблицы с разделителями), Excel и т. Д.) Файла, который он использует.Предпочтительно, это должно быть минимально инвазивным.
Я делал что-то подобное в Python раньше, но это было инвазивным в том смысле, что мне нужно было либо использовать дескрипторы, которые указывали необходимые типы, либо мне нужно было, чтобы дескрипторы все принималистроки и сделать преобразование в соответствующий тип.Я полагаю, что благодаря богатой информации о типах Scala, я могу быть менее агрессивным.