2013-03-17 6 views
7

Ich möchte eine Annotation oder ein Merkmal erstellen, das Methoden zu einem Objekt zur Kompilierzeit dynamisch hinzufügt, basierend auf vorhandenen Feldern. Obwohl ich mich für etwas auf Klassenebene interessiere, würde ich auch mit Annotationen auf Feldebene (oder etwas anderem mehr) arbeiten.Ist es möglich, etwas mit Scala @BeanProperty mit Makros zu implementieren?

An older stack-overflow question Fragen über die Implementierungsdetails von Scala @BeanProperty wurde mit beantwortet: "Es ist ein Compiler-Plugin, aber Makros können Sie auch dies tun". Ist angesichts der offiziellen (wenn auch experimentellen) Freigabe von Makros in Scala 2.10 eine solche Funktionalität jetzt möglich?

+0

Soweit ich verstehe, ist es nicht, aber sollte in einer zukünftigen Version wahrscheinlich 2.11 sein. –

Antwort

8

Aktualisierung: Diese Antwort ist nicht mehr gültig. Siehe Eugenes Kommentar.

Nein, das ist noch nicht möglich.

In 2.10 gibt es nur def-Makros, die nichts Vergleichbares machen können. Für 2.11 ist die Welt etwas besser, macro annotations und eine Implementierung zu Klassen introduce members ist bereits vorhanden. Aber sie sind nur einige Wochen alt und werden daher nur für einige Eckfälle funktionieren. Darüber hinaus lebt die Implementierung zur Einführung von Mitgliedern in Klassen in einem anderen Zweig als die Implementierung für Makro-Annotationen, so dass es noch nicht möglich ist, sie zusammen zu verwenden.

+0

Bereits mit dem neuen Macro Paradise 2.0.0-SNAPSHOT Release möglich: http://docs.scala-lang.org/overviews/macros/annotations.html. Paradise ist jetzt ein Plugin für 2.10, so dass es sofort verwendet werden kann. Mehr Informationen hier: https://groups.google.com/forum/?nomobile=true#!topic/scala-user/VBHrGB3nw9Y –

+0

@EugeneBurmako: Ja, so ändern sich die Dinge. ;) Ich habe die Antwort mit den neuen Informationen aktualisiert. – sschaef

+0

Ein Tutorial, das zeigt, wie die Implementierung von @BeanProperty mit Makros schön wäre;) – jhegedus

Verwandte Themen