Ответ 1
обновление 2012-07-04:
Daniel SOBRAL (также на SO) подробнее в своем блоге " Сериализация JSON с отражением в Scala! Часть 1 - Итак, вы хотите сделать отражение?" некоторые функции, возникающие с отражением:
Чтобы повторить, Scala 2.10 придет с библиотекой отражения Scala.
Эта библиотека используется самим компилятором, но разделена на слои через шаблон торта, поэтому разные пользователи видят различные уровни детализации, сохраняя jar размеры, адекватные каждому из них, и, надеюсь, скрывающие нежелательные детали.Библиотека отражения также интегрируется с предстоящими макрообъектами, что позволяет инициативным кодам манипулировать кодом во время компиляции.
обновление 2012-06-14. (из Евгений Бурмако):
В Scala 2.10.0-M4 мы выпустили новый API отражения который, скорее всего, превратится в 2.10.0-final без значительных изменений.
Более подробную информацию об API можно найти:
- SO answer Получить экземпляр объекта-компаньона с новым API-интерфейсом Scala
- Scala Отражение SIP, июнь 2012 г. от Мартина Одерского (SIP, на самом деле "Scala Процесс улучшения ")
- сводка и маршрут миграции из M3
Экстракты:
Вселенные и зеркала теперь являются отдельными объектами:
- все предметы артефактов отражения объектов (деревья, символы, типы и т.д.),
- зеркалирует абстрактную загрузку этих артефактов (например,
JavaMirror
загружает материал используя загрузчик классов и аннотацию, в то время как GlobalMirror использует внутренний компиляторclassreader
для достижения той же цели).API общедоступного отражения разделяется на
scala.reflect.base
иscala.reflect.api
.
- Первый представляет собой минималистский снимок, который достаточно для того, чтобы строить деревья и типы деревьев.
- Чтобы построить, но не анализировать - все умное (например, получение сигнатуры типа) реализовано в
scala.reflect.api
.Обе области отражения имеют свою собственную вселенную:
scala.reflect.basis
иscala.reflect.runtime.universe
.
- Первый суперлегкий и не содержит никаких загрузчиков классов,
- в то время как последний представляет собой сжатый компилятор.
Первоначальный ответ, сентябрь 2011 года:
Вы можете увидеть эволюцию пакета отражения в Scala GitHub repo с двумя последними фиксациями:
- Изменения в Liftcode для использования новой семантики отражения, где компилятор использует проверку типов.
- Начала работу над инструментарием компилятора, который может компилировать деревья отражения во время выполнения.
(Подпись Liftcode, согласно этот поток, направлена на упрощение "написания кода, который пишет код" )
Класс scala/reflect/internal/Importers.scala
(создан вчера!) - хороший пример использования последней функции отражения.