我正在尝试编写以下内容:
import scala.reflect.runtime.universe._
val value: Tree = /* some AST */
val tpe = typeOf(value) // This should be the result type of the AST.
// This is pseudocode. What should
// actually go on this line?
q"""
type U = $tpe
val v: U = $value
"""
我需要捕获由 AST 表示的值的类型value
并将tpe
其分配给U
. 如何做到这一点?
编辑:在这里通过准引号为其提供类型注释value
和匹配不是一个选项。用例是一个无形可扩展记录,它具有复杂的类型,String with labelled.KeyTag[1, String] :: Long with labelled.KeyTag[three, Long] :: HNil
例如val ls = (1 ->> "two") :: ("three" ->> 4L) :: HNil
. 此外,value
AST 是以编程方式生成的,而不是文字。