2012-06-29 3 views
4

Я хотел бы знать, если возможно следующее в Scala (но я думаю, что вопрос может быть применен также к Java):Scala динамический класс управления

  • Создать Scala файл динамически (ок, нет проблем здесь)
  • Компиляция это (я не думаю, что это будет реальная проблема)
  • Load/Unload новый класс динамически

Помимо того, что возможно загрузить/перезагрузить динамический код (это возможно на Java, поэтому я думаю, что это возможно и в Scala). Мне также хотелось бы знать, что это связано с ухудшением производительности (у меня могло бы быть много классов, нет имени, но на самом деле многие из них!).

TIA!

P.S .: Я знаю, что другие вопросы о загрузке классов в Scala существуют, но я не смог найти ответ о производительности!

+0

Я не уверен, какого ответа вы ожидаете. Кажется, что вы хотите знать, какова оценка исполнения? Вы можете вывести его непосредственно из своего списка: t_total = t_createSource + t_compile + t_loadClass. Я бы предположил, что это будет выполнение от выполнения чего-то в REPL. –

+0

См. Также [этот вопрос] (http://stackoverflow.com/questions/2752206/dynamically-create-class-in-scala-should-i-use-interpreter?lq=1). Ответ Кевина Райт содержит в основном весь код, который вам нужен, чтобы выполнить тест производительности. –

ответ

2

Да, все, что вы хотите сделать, конечно же возможно. Вы можете взглянуть на ScalaMock, что является примером создания исходного кода Scala динамически. И в SBT, который является примером вызова компилятора из кода. И тогда существует много разных систем, которые динамически загружают классы - в качестве отправной точки смотрите документацию для loadLibrary.

Но, в зависимости от того, чего вы хотите достичь, вы, возможно, захотите взглянуть на Scala Macros. Они обеспечивают такую ​​же гибкость, что и вы, создавая исходный код и компилируя его, но без многих недостатков этого подхода. Исходная версия ScalaMock используется для генерации исходного кода, но I'm in the process of moving to using macros instead.

2

Это все возможно в Scala, что ясно продемонстрировано REPL. Scala 2.10 будет относительно непросто.

Смежные вопросы