Я работаю над библиотекой, которая нуждается в отражении, и нуждается в Scala -специфической информации, в отличие от того, что доступно через стандартный API отражения Java. Прямо сейчас я использую недокументированный код в scalap (эквивалент Scala для javap) и пытается связать данные, которые он предоставляет объектам отражения Java, чтобы я мог вызывать методы и такие (scalap просто разбирает файлы классов).
Я нашел это, но там ничего нет... https://github.com/dubochet/scala-reflection
... и я искал Scala SVN repo для его следов и не смог найти его там (но это могло быть я просто пропустил).
Кто-нибудь знает библиотеку отражений 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 информацией о богатом типе, я могу быть менее инвазивным.