你見過Luca的固定點例子Haxe 3和摘要嗎? 它在這裏: https://groups.google.com/forum/?fromgroups=#!topic/haxelang/JsiWvl-c0v4
總結起來,與新HAXE 3抽象類型,你可以定義將被編譯成一個int類型:
abstract Fixed16(Int)
{
inline function new(x:Int) this = x;
}
您還可以定義「轉換函數」 ,這將讓你一個浮動自動轉換成Fixed16:
@:from public static inline function fromf(x:Float) {
#if debug
if (x >= 32768.0 || x < -32768.0) throw "Conversion to Fixed16 will overflow";
#end
return new Fixed16(Std.int(x*65536.0));
}
這裏的祕密是@:from
元數據。有了這個代碼,你就已經可以宣告固定的類型是這樣的:在這裏
@:op(A+B) public inline static function add(f:Fixed16, g:Fixed16) {
#if debug
var fr:Float = f.raw();
var gr:Float = g.raw();
if (fr+gr >= 2147483648.0 || fr+gr < -2147483648.0) throw "Addition of Fixed16 values will overflow";
#end
return new Fixed16(f.raw()+g.raw());
}
再次,祕密:
var x:Fixed16 = 1.2;
盧卡的已定義的一些運營商,使他們的工作更容易,像在@:op(A + B)元數據中,它將註釋在處理添加時可能會調用此函數。完整的GIST代碼可在https://gist.github.com/deltaluca/5413225獲得,您可以通過http://haxe.org/manual/abstracts
瞭解更多關於摘要的信息!太美了! – MetaChrome 2013-05-11 12:26:40