2013-03-17 5 views
7

Vorrei creare un'annotazione o una caratteristica che aggiunge metodi a un oggetto in fase di compilazione in modo dinamico, in base ai campi esistenti. Anche se sono interessato a qualcosa a livello di classe, lavorerei anche con annotazioni a livello di campo (o qualcos'altro più granulare).È possibile implementare qualcosa di simile a @BeanProperty di Scala con macro?

An older stack-overflow question chiedere informazioni sui dettagli di implementazione di @BeanProperty di Scala ha risposto con "È un plug-in del compilatore, ma le macro possono anche consentire di farlo". Data la versione ufficiale (se sperimentale) delle macro in Scala 2.10, questo tipo di funzionalità è ora possibile?

+0

Per quanto ho capito, non lo è, ma dovrebbe essere in una versione futura, probabilmente 2.11. –

risposta

8

Aggiornamento: Questa risposta non è più valida. Vedi il commento di Eugenio.

No, non è ancora possibile.

In 2.10 esistono solo macro def che non possono fare nulla di simile. Per 2.11 il mondo è leggermente migliore, macro annotations e un'implementazione a introduce members per le classi già esistenti. Ma hanno solo alcune settimane e quindi lavoreranno solo per alcuni casi d'angolo. Inoltre, l'implementazione per introdurre membri in classi vive in un ramo diverso rispetto all'implementazione per le annotazioni macro, quindi non è ancora possibile usarli insieme.

+0

Già possibile con il recente rilascio di macro paradise 2.0.0-SNAPSHOT: http://docs.scala-lang.org/overviews/macros/annotations.html. Paradise ora è un plugin per 2.10, quindi può essere utilizzato subito. Maggiori informazioni qui: https://groups.google.com/forum/?nomobile=true#!topic/scala-user/VBHrGB3nw9Y –

+0

@EugeneBurmako: Sì, questo è il modo in cui le cose cambiano. ;) Ho aggiornato la risposta con le nuove informazioni. – sschaef

+0

Un tutorial che mostra come implementare @BeanProperty usando le macro sarebbe bello;) – jhegedus

Problemi correlati