パラメータの元の入力文字列をマクロに取得しようとしていますが、返された位置は少し外れているようです。たとえば、このマクロを考えてみましょう:Scalaマクロの位置付けはどうですか?
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
を指すことを期待しているか、1つ離れていてください。どうしたの?
)) 'y 'の点を1点にずらし、' println(Mf(if(true){x + y})) 'でポイントがfの点を指す。私はそれが木の頂点を指し示そうとしていると思われます。+またはifの呼び出しですが、そうするかどうかは別の質問です。少なくとも1つのオフ・バイ・ワン・エラーも存在する可能性があります。これは私にとってバグレポートに適しています。 – wingedsubmariner
質問に「マクロであなたの立場は? –