Scala解析字符串类并在运行时编译

时间:2016-11-10 20:30:36

标签: scala

我想在scala中实现一个函数,它可以解析源代码的字符串(类对象)并在运行时将其编译为一个对象。

例如,该函数是我到目前为止所尝试的。我的目标是在运行时环境中运行它,我可以使用它的构造函数或其函数。此代码有运行时错误,但我不明白如何修复反射类错误。谢谢!

c.Expr[Expr[Unit]]

1 个答案:

答案 0 :(得分:1)

问题是外部编译器不知道" insideclass"作为类定义存在。一种解决方案是使内部类扩展一些内部和外部编译器都知道的其他类,例如Function [Int,Int]。您需要重命名" test"方法"申请"在这种情况下。

val clazz = tb.compile(tb.parse("class PersonData(x:Int) extends  Function[Int, Int] {\n val allen = x.toInt\n\n override def apply(x:Int):Int = allen}\n scala.reflect.classTag[PersonData].runtimeClass"))().asInstanceOf[Class[_]]

val ctor = clazz.getDeclaredConstructors()(0)

val instance = ctor.newInstance(new Integer(1))
// this cast can succeed because the outside knows what is Function[Int, Int]
println(instance.asInstanceOf[Function[Int, Int]].apply(1))