Bir makro için bir parametrenin orijinal giriş dizesi almaya çalışıyorum, ancak döndürülen konum biraz uzakta görünüyor. örneğin, bu makro düşünün:Scala makrolarında ne var?
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
}
}
bu dosya ile çalıştığınızda:
object N extends App {
val x = 1
val y = 2
println(M.f(x + y))
}
bu çıktıyı almak:
println(M.f(x + y))
^
^
bana mantıklı olmadığı. x
'a işaret etmesini beklerim ya da bir defalık olsun. Ne var ne yok?
. + (Y))) 'nokta y üzerinde bir noktaya kaydırır ve println (Mf (if (doğru) {x + y})) ile f'de işaret eder. Ağacın tepesine bakmaya çalıştığını sanıyorum, isterse isterse isterse başka bir soru olsa da olmasa da, + ya da onun ifadesi. En az bir tane birebir hata da olabilir. Bu bana bir hata raporu için uygun görünüyor. – wingedsubmariner
Soru okunduğunda daha eğlenceli olur, Makrolardaki konumunuz nedir? –