イベントを受け取るような処理ってよく書きますよね。
// こんな感じのコード
event.on("ready", function() {
// somewhere
});
event.on("close", function() {
// somewhere
});
上記のようなコードで、第一引き数の文字列のイベント名は型で定義してしまいたいところです。
// 第一引き数をStringではなく、以下のコードのように型で定義したい。
function on(eventName: EventType, cb: Void -> Void) {
// somewhere
}
haxeではこのような問題を@:enum
と抽象型を利用して解決することが出来ます。
// このようにイベントの文字列を定義する抽象型を作っておく
@:enum abstract EventType(String) from String to String {
var ready: String = "ready";
var close: String = "close";
}
// 文字で指定していたEventTypeに型チェックが効くようになった!
event.on(EventType.ready, function() {
// somewhere
});
event.on(EventType.close, function() {
// somewhere
});
EventType.xxx
と記述した箇所はコンパイル時に文字列に変換されます。
この方法を覚えておくと、様々な場所で応用が効いて大変便利です。