Подтвердить что ты не робот

API Reflection для Scala

Кто-нибудь знает статус полнофункционального API отражения для Scala?

Я знаю, что вы можете использовать API отражения Java, чтобы делать простые вещи, но это плохо работает с языковыми функциями Scala. Я нашел интересную статью описывающую экспериментальный Scala Mirroring API, но насколько я знаю, это еще экспериментально. Я также нашел упоминание о ScalaSigParser, но это кажется довольно низким уровнем.

Это больше любопытство, чем что-либо еще, поскольку я сейчас просто играю с Scala. Я думал, что ответ на этот вопрос также может быть полезен другим, заинтересованным в Scala.

4b9b3361

Ответ 1

"Неизменяемая замена шаблона стиля JavaBean" может быть выражена именованными параметрами и, возможно, аннотацией @BeanProperty:

import reflect._
case class A(@BeanProperty val x: String, @BeanProperty val y : Int)

A(x = "s", y = 3)
A(y = 3, x = "s")

Добавление методов (точнее: определение нового интерфейса) имеет смысл только в статически типизированном языке, если клиент знает о новых методах и может скомпилировать его с интерфейсом. С помощью структурной типизации клиенты могут определять методы, которые они ожидают присутствовать в объекте. Компилятор Scala преобразует структурный тип в код отражения, который может выйти из строя во время выполнения.

type T = {def go(x : Int): Int }
def y(any : Any) = any.asInstanceOf[T].go(2)

class A{
  def go(x : Int) = x + 1
}
y(new A())
y(new {}) //this will fail

Вы можете определить новые классы или черты с помощью interpreter на лету. Метод Interpret преобразует код Scala в байтовый код.

Вы уже упоминали ScalaSigParser, с которым работать нелегко.

Я думаю, что остальная часть функций, которые вам нравятся, еще не существует.