我正在尝试将参数的原始输入字符串获取到宏,但返回的位置似乎有点偏离。考虑这个宏,例如:
object M {
import scala.reflect.macros.Context
import language.experimental.macros
def f[T](v: => T) = macro fImpl[T]
def fImpl[T : c.WeakTypeTag](c: Context)(v: c.Expr[T]): c.Expr[Unit] = {
import c.universe._
val pos = v.tree.pos
println(pos.lineContent)
println(" " * pos.column + "^")
println(" " * pos.point + "^")
c.literalUnit
}
}
当我尝试使用此文件时:
object N extends App {
val x = 1
val y = 2
println(M.f(x + y))
}
我得到这个输出:
println(M.f(x + y))
^
^
这对我来说没有意义。我希望它指向x
,或者相差一个。那是怎么回事?