我正在尝试使用Scala反射工具箱定义一个Case类并示例化它。做这件事最好的方法是什么?
在我做的那一刻
val codeToCompile = q"""case class Authentication(email:String)"""
val tree = toolbox.parse(codeToCompile)
val classDefinition : ClassDef = tree.asInstanceOf[ClassDef]
val definedClass = toolbox.define(classDefinition)
我希望在将Case类定义到工具箱中之后,使用它的构造函数在运行时示例化它,如
val codeToCompile = q"""val myAuth = Authentication("test@gmail.com")"""
val tree = toolbox.parse(codeToCompile)
val binary = toolbox.compile(tree)()
我收到错误:找不到身份验证...我该怎么做呢?
1条答案
按热度按时间ddrv8njm1#
首先,
s
插值器生成字符串,q
插值器生成树。因此,要么使用不带.parse
的q"..."
,要么使用带.parse
的s"..."
。**其次,**使用您已有的
ClassSymbol
definedClass
。第三,
.apply
是伴随对象方法。因此,请使用.companion
。**第四,**使用工具箱在单行
q"val x = ???"
中定义局部变量没有太大意义,反正以后很难使用这个TermSymbol
(与ClassSymbol
相反)。尝试