मैं एक मैक्रो के पैरामीटर की मूल इनपुट स्ट्रिंग प्राप्त करने का प्रयास कर रहा हूं, लेकिन लौटाई गई स्थिति थोड़ा सा लगता है। इस मैक्रो पर विचार करें, उदाहरण के लिए:स्कैला मैक्रोज़ पर स्थिति के साथ क्या हो रहा है?
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
पर इंगित करें, या एक से दूर रहें। उसके साथ क्या है?
आप 'को println (एमएफ (एक्स इसे बदल सकते हैं। + (Y))) 'बिंदु y पर इंगित करने के लिए एक से अधिक स्थानांतरित होता है, और' println (एमएफ (अगर (सत्य) {x + y}) के साथ) 'यह अगर f में इंगित करता है। मुझे संदेह है कि यह पेड़ के शीर्ष पर इंगित करने की कोशिश कर रहा है, + या अगर का आविष्कार, हालांकि यह माना जाता है कि यह एक और सवाल है या नहीं। कम-से-कम एक-एक-एक त्रुटि भी हो सकती है। यह मुझे एक बग रिपोर्ट के लिए उपयुक्त लग रहा है। – wingedsubmariner
प्रश्न पढ़ने पर यह मजेदार होगा, मैक्रोज़ पर आपकी स्थिति क्या है? –