Tôi đang cố gắng lấy chuỗi đầu vào ban đầu của tham số vào macro, nhưng vị trí được trả lại có vẻ hơi lệch. Cân nhắc macro này, ví dụ:Có gì với vị trí trên các macro 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
}
}
Khi tôi thử nó với tập tin này:
object N extends App {
val x = 1
val y = 2
println(M.f(x + y))
}
tôi nhận được kết quả này:
println(M.f(x + y))
^
^
mà không có ý nghĩa đối với tôi. Tôi hy vọng nó sẽ trỏ đến x
hoặc bị tắt một. Có chuyện gì thế?
Nếu bạn thay đổi nó cho 'println (Mf (x. + (Y))) 'điểm dịch chuyển qua một điểm tại điểm y, và với' println (Mf (nếu (đúng) {x + y})) 'nó trỏ tới điểm f nếu. Tôi nghi ngờ nó đang cố gắng để trỏ ở trên cùng của cây, lời kêu gọi của + hoặc nếu, mặc dù cho dù đó là vụ phải hay không là một câu hỏi khác. Có thể có ít nhất một lỗi từng người một. Điều này có vẻ thích hợp cho một báo cáo lỗi cho tôi. – wingedsubmariner
Sẽ thú vị hơn nếu đọc câu hỏi, Vị trí của bạn trên macro là gì? –