![](/img/trans.png)
[英]Scala reflection: how do I define a case class at runtime and then reference to it?
[英]Using Scala Toolbox is it possible to define a case class and use it later into eval code?
我想將案例 class 定義提供給工具箱,以便稍后在進行評估時使用它們。 工具箱應該能夠知道案例類的定義。
例如,我可以使用 args email 定義一個名為 Authentication 的案例 class
import scala.reflect.runtime._
import scala.reflect.runtime.universe._
import scala.tools.reflect.ToolBox
val cm = universe.runtimeMirror(getClass.getClassLoader)
val toolBox = cm.mkToolBox()
val myClass: ClassDef = q"case class Authentication(email: String)".asInstanceOf[ClassDef]
val definedClass = toolBox.define(myClass)
println(definedClass)
它打印class Authentication
然后我想將它召回到我的 Eval 表達式中並匹配它
val myCode =
q""" def myFunction(x:Any){
x match{
case Authentication(param) => println("Auth received!")
}
}"""
toolBox.eval(myCode)
但它告訴我,找不到身份驗證。 知道如何完成它嗎?
由於.apply
和.unapply
是伴隨 object 的方法,因此您錯過了.companion
類似的.companion 反射:如何在運行時定義案例 class 並引用它
嘗試
val myCode =
q"""
def myFunction(x: Any) = {
x match{
case ${definedClass.companion}(param) => println("Auth received!")
}
}
myFunction(${definedClass.companion}("111@aaa"))
"""
toolBox.eval(myCode) // toolBox.eval(myCode)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.