Ausgabe
Ich habe folgenden Code:
object Macros {
import scala.language.experimental.macros
import scala.reflect.macros.blackbox
def hello(): Unit = macro hello_impl
def hello_impl(c: blackbox.Context)(): c.Expr[Unit] = {
import c.universe._
reify {
println("Hello World!")
}
}
}
object Main {
def main(args: Array[String]): Unit = {
Macros.hello()
}
}
Es wirft den folgenden Kompilierungsfehler:
Error:(21, 17) macro implementation not found: hello
(the most common reason for that is that you cannot use macro implementations in the same compilation run that defines them)
Macros.hello()
^
Meine Frage ist: Gibt es eine Möglichkeit, den Compiler zu “täuschen”, um Makroerweiterungen in derselben Datei zu verwenden, in der sie definiert sind? Meine Motivation ist folgende: Ich programmiere gerne in Scala, und in letzter Zeit habe ich einige Probleme in Online-Richter -Codeforces eingereicht , und einige Scala-Konstruktionen erwiesen sich als sehr langsam. Also möchte ich einige Makroerweiterungen erstellen, um diese Konstruktionen schnell auszuführen. Aber ich kann nicht mehr als eine Datei einreichen.
Vielen Dank!
Lösung
Derzeit ist dies in den Produktionsversionen von Scala 2.10 und 2.11 nicht möglich. Mit scala.meta könnten wir das vielleicht erreichen, aber das liegt in weiter Zukunft.
Beantwortet von – Eugene Burmako
Antwort geprüft von – Clifford M. (FixError Volunteer)