簡體   English   中英

使用 Scala 工具箱是否可以定義一個案例 class 並稍后將其用於評估代碼?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM