ユーザ定義のアノテーション
まだ先の話だけど,これが出来るようになるとリフレクションがないD言語でも普通のテスティングフレームワークとかが書ける気がする.今でも
while (clazz.base !is null) { clazz = clazz.base; if (clazz is Foo.classinfo) { ... } }
とかやって継承を辿ってやれば「Fooを継承してるクラスだけ」とかいう制限は出来るけど,メソッドが取得出来なくて残念な感じだった(flectionedだととうなんだろ?).unittestは便利だけど,TDDのようなツールとしてはやっぱり非力だし.
しかしアノテーションって関数とかへの付加情報だからランタイムでかくなるのかなぁ.それともデフォルトコンパイルタイムまで持つ感じにしてJavaみたいにメタアノテーションで指定するのか?どーなるんだろ.待ち遠しい…
追記
2chでtraitsが出てきて,そういやそんなものあったなと思い出して,特定のメソッドだけ取得できるかも?とか思ったけどやっぱり無理だった.
foreach (moduleInfo; ModuleInfo) { foreach (clazz; moduleInfo.localClasses) { auto test = clazz; while (clazz.base !is null) { clazz = clazz.base; if (clazz is Test.classinfo) { foreach (funcName; __traits(derivedMembers, test)) ... } } } }
__traitsの所でtestの型が取れない.やっぱりアノテーション待ちか…