关于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();

})();


 

你可能感兴趣的:(构造方法)