2013-03-17 17 views
7

Chciałbym utworzyć adnotację lub cechę, która dynamicznie dodaje metody do obiektu w czasie kompilacji, w oparciu o istniejące pola. Chociaż jestem zainteresowany czymś na poziomie klasy, pracowałbym również z adnotacjami na poziomie pola (lub czymś jeszcze bardziej szczegółowym).Czy można zaimplementować coś podobnego do Scala @BeanProperty z makrami?

An older stack-overflow question pytanie o szczegóły implementacji Scala's @BeanProperty zostało odpowiedział: "Jest to wtyczka kompilatora, ale makra mogą również pozwalają to zrobić". Biorąc pod uwagę oficjalne (jeśli eksperymentalne) wydawanie makr w Scali 2.10, czy ten rodzaj funkcjonalności jest teraz możliwy?

+0

O ile rozumiem, nie jest, ale powinien być w przyszłej wersji, prawdopodobnie 2.11. –

Odpowiedz

8

Aktualizacja: Ta odpowiedź jest już nieaktualna. Zobacz komentarz Eugenesa.

Nie, jeszcze nie jest to możliwe.

W wersji 2.10 istnieją tylko makropolecenia def, które nie mogą zrobić niczego porównywalnego. W przypadku wersji 2.11 świat jest nieco lepszy, macro annotations, a implementacja do introduce members już istnieje. Ale mają tylko kilka tygodni i dlatego będą działać tylko w niektórych przypadkach narożnych. Ponadto implementacja w celu wprowadzenia członków do klas funkcjonuje w innej gałęzi niż implementacja dla adnotacji makro, dlatego nie można jeszcze ich używać razem.

+0

Jest to już możliwe w przypadku najnowszego wydania makra Paradise 2.0.0-SNAPSHOT: http://docs.scala-lang.org/overviews/macros/annotations.html. Paradise jest teraz wtyczką do wersji 2.10, więc można z niej korzystać od razu. Więcej informacji tutaj: https://groups.google.com/forum/?nomobile=true#!topic/scala-user/VBHrGB3nw9Y –

+0

@EugeneBurmako: Tak, tak się zmienia. ;) Zaktualizowałem odpowiedź, podając nowe informacje. – sschaef

+0

Samouczek pokazujący, jak dobrze byłoby zaimplementować implementację @BeanProperty przy użyciu makr;) – jhegedus

Powiązane problemy