2013-07-12 5 views
1

Я динамически определил класс Scala, но для того, чтобы использовать его «правильно», он должен иметь ScalaSig.Как я могу создать собственный ScalaSig?

Итак, как я могу сгенерировать ScalaSig вне обычной компиляции? Может, из дерева? Возможно, например:

val tb = runtimeMirror(getClass.getClassLoader).mkToolBox() 
val classDef = """class MyRecord(x: String)""" 
val tree = showRaw(tb.parse(classDef)) 

Но куда же входит сборщик?

Спасибо за любые советы -Julian

+0

Считаете ли вы использование инструментария для определения класса? Затем он автоматически генерирует необходимые сигнатуры. –

+0

Привет, Евгений, да, но определение класса происходит во время выполнения. Правильно ли я полагаю, что панели инструментов будут работать только во время компиляции? Могу я рассказать вам, как я возбужден для макросов типа !? –

+1

Инструментальные панели работают во время выполнения. Этот запрос на растяжение позволяет им определять общедоступные классы: https://github.com/scala/scala/pull/2662, но это для 2.11. Между тем, в 2.10 вы можете использовать https://gist.github.com/xeno-by/5845539. Пожалуйста, дайте мне знать, если что-то не работает. –

ответ

0

Artisanal-Pickle-Maker будет воспроизводить Scala маринованные подпись байт-на-байт (см ограничений).

Наслаждение фазы Pickler составителя, а также повторное использованием коды Pickler «s, оказалось слишком сложной задачей, так что вместо этого я использовал PickleBuffer, ShowPickled и Whole Lotta diff -y, чтобы выяснить, как генерировать произвольный маринованный Sigs Scala.