2013-03-17 8 views
7

既存のフィールドに基づいて、コンパイル時にオブジェクトにメソッドを動的に追加するアノテーションまたは特性を作成したいと考えています。私はクラスレベルで何かに興味がありますが、フィールドレベルのアノテーション(またはもっと細分化されたもの)も扱っています。マクロを使ってScalaの@BeanPropertyに似たものを実装することは可能ですか?

An older stack-overflow question Scalaの実装の詳細について尋ねた@BeanPropertyは、「コンパイラプラグインですが、マクロでもこれを実行できます」と回答しました。 Scala 2.10でマクロの公式リリース(実験的であれば)があれば、このような機能が可能になりましたか?

+0

私が理解する限り、そうではありませんが、将来のバージョン、おそらく2.11にあるはずです。 –

答えて

8

更新:この回答はもう有効ではありません。ユージネスのコメントを参照してください。

いいえ、まだできません。

2.10には、同等のものを実行できないdefマクロしか存在しません。 2.11の場合、世界はもう少し良くなります。macro annotationsと、クラスへの実装はintroduce membersです。しかし、彼らは数週間しか経っていないので、いくつかのコーナーケースでのみ動作します。さらに、クラスにメンバーを導入する実装は、マクロ注釈の実装とは異なる分岐にあります。したがって、それらを一緒に使用することはまだできません。

+0

最近のマクロパラダイス2.0.0-SNAPSHOTリリースで既に可能です:http://docs.scala-lang.org/overviews/macros/annotations.html。 Paradiseは2.10用のプラグインになっているので、すぐに使用できます。詳細はこちらhttps://groups.google.com/forum/?nomobile=true#!topic/scala-user/VBHrGB3nw9Y –

+0

@EugeneBurmako:はい、これは物事が変わる方法です。 ;)私は新しい情報で答えを更新しました。 – sschaef

+0

マクロを使って@BeanPropertyを実装するのがいい方法を示すチュートリアル;) – jhegedus

関連する問題