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
答案 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) {
...
}
}