Haxe是否已命名块或类似?

时间:2014-07-14 12:52:43

标签: haxe

Haxe中是否存在与命名块相同的行为(如Action Script 3中所示)?我不知道是否有名字阻止'是正确的术语。

给出以下示例(突出显示一个点的基本示例):

    singleCollision: {
            for (teleport in teleports) {
                if ( overlap(player, teleport ) ) {
                    onTeleport(player, teleport);
                    break singleCollision;
                }
            }

            for (chest in chests) {
                if ( overlap(player, chest ) ) {
                    onChest(player, chest);
                    break singleCollision;
                }
            }

            for (shop in shops) {
                if ( overlap(player, shop ) ) {
                    onShop(player, shop);
                    break singleCollision;
                }
            }
    }

如果发生碰撞,请中断该区块并继续。我知道有一些替代方法,比如内联函数等,但更加好奇是要知道Haxe是否支持类似的东西。

这里有一个很好的例子: http://jacksondunstan.com/articles/1228

2 个答案:

答案 0 :(得分:0)

它通常被称为代码标签或GOTO标签。

不,haxe中没有这样的东西。 (还有一些是它的后端。)

很长一段时间以来,Spaghetty代码被认为是一种不好的做法。使用条件循环,它们更清晰。

答案 1 :(得分:-1)

如果使用try-catch,则可以检测到代码断开位置:

try {
        for (teleport in teleports) {
            if ( overlap(player, teleport ) ) {
                onTeleport(player, teleport);
                throw 0;
            }
        }

        for (chest in chests) {
            if ( overlap(player, chest ) ) {
                onChest(player, chest);
                throw 1;
            }
        }

        for (shop in shops) {
            if ( overlap(player, shop ) ) {
                onShop(player, shop);
                throw 2;
            }
        }
}
catch(e:Dynamic)
{
        switch (e) {
             ...
        }
}