关于Haxe3新特性“内联构造方法”的解释

 

学习过C/C++的童鞋们应该了解inline即内联机制的意义,Haxe语言也很好的支持内联机制,让开发者可以自己在空间效率和时间效率上进行取舍。

 

从Haxe3开始,构造方法也可以使用inline关键字声明为内联的,那么在实际环境中,Haxe编译器是如何处理构造方法内联的呢?Google圈子里有位大牛用一个实际的例子帮助大家进行理解,原帖地址在:https://groups.google.com/forum/#!topic/haxelang/HDHQBcMNdp8


大牛的例程如下:

注意:内联构造方法会把类成员转换成局部变量。

 

import haxe.io.*;
class Test {
    static function main() {
        for(i in new BetterIntIter(10, 20, 2))
            trace(i);
    }
}
class BetterIntIter {
    var curr:Int;
    var max:Int;
    var jump:Int;
    public inline function new(from:Int, to:Int, jump:Int = 1) {
        this.curr = from;
        this.max = to;
        this.jump = jump;
    }
    public inline function hasNext():Bool
        return curr < max;
    public inline function next():Int
        return curr += jump;
}
上面Haxe源码会被转化为如下JS代码,注意类变量的处理:
(function () { "use strict";
var Test = function() { }
Test.main = function() {
    var _g_curr = 10, _g_max = 20, _g_jump = 2;
    while(_g_curr < _g_max) {
        var i = _g_curr += _g_jump;
        console.log(i);
    }
}
Test.main();
})();

 

posted on 2013-08-25 21:43  新一  阅读(245)  评论(0编辑  收藏  举报

导航