【发布时间】:2014-05-08 14:00:03
【问题描述】:
如何从宏中查看符号的定义?
作为一种特殊情况,我想知道如何在编译时使用宏来评估常量值。 我的方法适用于“最终 val”,但不适用于本地“val”:
// scalaVersion := "2.11.0"
import scala.reflect.macros.blackbox.Context
import scala.language.experimental.macros
object Const {
def m_same(c: Context)(i: c.Tree) = {
import c.universe._
val Literal(Constant(_)) = i
i
}
def same(i: Any): Any = macro m_same
}
本地值未被识别为Literal(Constant(_)):
import org.scalatest.FreeSpec
class ConstSpec extends FreeSpec {
"Int literal" in {
assert(Const.same(42) === 42)
}
final val iFinal = "mytest" // is a Literal(Constant(_))
"final Int value" in {
assert(Const.same(iFinal) === iFinal)
}
"local Int value" in {
val iLocal = 42 // is NOT a Literal(Constant(_))
assert(Const.same(iLocal) === iLocal) // does NOT compile
}
}
【问题讨论】:
标签: scala reflection macros scala-macros