Предположим, у меня есть следующее в Scala
object Foo {
var functions: List[String => String] = Nil // can be any type to any type.
def addFunc(f:String => String) = functions = f :: functions
}
Во время выполнения мне дают Foo
с некоторыми добавленными функциями.Теперь я хочу создать новый файл .class, реализующий что-то вроде следующего в Scala:
object MyObject {
def process1(s:String) = // call Foo.functions(1)
}
Затем я хочу сохранить MyObject
в байт-код, который может быть выполнен позже, даже если Foo
там нет,
Выше приведен пример того, что я хочу сделать.Мне даны имена MyObject
, process1
, и я должен сгенерировать исполняемый файл MyObject.class
.Источник MyObject
не нужен (это вполне мог быть источник Java).
Итак, на высоком уровне нам нужно взять «снимок» памяти в Foo.function(1)
, преобразовать этот снимок в байт-код для хранения и с помощью этого сгенерировать байт-код MyObject
.
Все инженерные библиотеки байт-кода, которые я нашел, являются слишком низкоуровневыми, поэтому мне было интересно, есть ли библиотека более высокого уровня, которая позволяет мне иметь дело с абстрактными объектами, такими как функции и т. Д.