【发布时间】:2017-12-10 22:22:16
【问题描述】:
我需要编译函数,然后使用List[Map[String, AnyRef]] 类型的不同参数对其进行评估。
我有以下代码不使用这种类型进行编译,而是使用 List[Int] 等简单类型进行编译。
我发现Liftable在scala.reflect.api.StandardLiftables.StandardLiftableInstances中只有某些实现
import scala.reflect.runtime.universe
import scala.reflect.runtime.universe._
import scala.tools.reflect.ToolBox
val tb = universe.runtimeMirror(getClass.getClassLoader).mkToolBox()
val functionWrapper =
"""
object FunctionWrapper {
def makeBody(messages: List[Map[String, AnyRef]]) = Map.empty
}""".stripMargin
val functionSymbol =
tb.define(tb.parse(functionWrapper).asInstanceOf[tb.u.ImplDef])
val list: List[Map[String, AnyRef]] = List(Map("1" -> "2"))
tb.eval(q"$functionSymbol.function($list)")
出现编译错误,我该如何让它工作?
Error:(22, 38) Can't unquote List[Map[String,AnyRef]], consider using
... or providing an implicit instance of
Liftable[List[Map[String,AnyRef]]]
tb.eval(q"$functionSymbol.function($list)")
^
【问题讨论】:
标签: scala scala-macros scala-quasiquotes