मैं एक प्रकार के मैक्रो (नाम Static
) के साथ एक वर्ग (नाम Foo
) नामक एक स्थिर फ़ील्ड (bar
नामित) जोड़ना चाहता हूं। ,एक स्थिर सदस्य कैसे उत्पन्न करें और इसे किसी प्रकार के मैक्रो के भीतर किसी वर्ग में जोड़ें?
मैक्रो
import language.experimental.macros
import scala.reflect.macros.Context
package object statics {
type Static = macro Statics.addStaticField
object Statics {
def addStaticField(c: Context): c.Tree = {
import c.universe._
val STATIC = 1 << 23
type CompilerSymbol = scala.tools.nsc.Global#Symbol
def setFlag(symbol: Symbol, flag: Long) {
val compilerSymbol = symbol.asInstanceOf[CompilerSymbol]
println("Setting flag ...")
compilerSymbol.setFlag(flag)
}
def printFlags(symbol: Symbol) {
println("Flags: " + symbol.asInstanceOf[CompilerSymbol].flagString)
}
val staticField: ValDef =
ValDef(
mods = Modifiers(),
name = TermName("bar"),
tpt = TypeTree(),
rhs = Literal(Constant(42))
)
printFlags(staticField.symbol)
setFlag(staticField.symbol, STATIC)
printFlags(staticField.symbol)
val Template(parents, _, existingCode) = c.enclosingTemplate
Template(Nil, emptyValDef, staticField :: existingCode)
}
}
}
संकलन के दौरान, setFlag
करने के लिए कॉल असर पड़ रहा है क्योंकि झंडा स्ट्रिंग परिवर्तन:
यह कैसे मैं वर्तमान में यह करने के लिए कोशिश कर रहा हूँ है
Flags:
Setting flag ...
Flags: <static>
लेकिन ऐसा लगता है कि इसका उपयोग साइट पर बिल्कुल वास्तविक प्रभाव नहीं है:
package statics
class Foo extends Static
object Main extends App {
Foo.bar // Fails to compile
(new Foo).bar // Compiles
}
show
और showRaw
STATIC
का कोई भी संकेत भी नहीं दिखाते।
मैं इस मुद्दे को कैसे हल कर सकता हूं?
हाय साइमन! क्षमा करें मैं वास्तव में इन दिनों swamped किया गया है। इस और आपके द्वारा रिपोर्ट की जाने वाली अन्य समस्याओं को प्राप्त करने का प्रयास करेंगे। –