2014-07-14 27 views
0

Haxe中是否存在與命名塊等同的行爲(就像在行爲腳本3中那樣)?我不知道'named block'是否是正確的名詞。Haxe是否命名塊或類似?

鑑於下面的例子(一個基本的例子,突出的點):

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

它通常被稱爲碼標籤或GOTO標籤。

不,haxe沒有這種東西。 (並且在一些後端)

Spaghetty代碼已被認爲很長一段時間了。使用條件循環,它們更清晰。

+0

雖然我同意,有一個地方,尤其是扁平化箭頭的代碼時http://blog.codinghorror.com/flattening-箭頭代碼/。在這種情況下,我不知道條件循環的工作效果如何,只會進一步將箭頭驅動到右側 – Chris

+0

@Chris但是本文中沒有任何關於代碼標籤的內容。我懷疑用它們可以解決這個問題,而不用去純粹的GOTO地獄。實際上,大部分情況都可以通過我的經驗巧妙思考來解決。如果yhou有幾個地方需要深度嵌套 - 爲什麼不呢,你真的需要它,對嗎?代碼背後的操作將足夠複雜,足以證明代碼稍微複雜一些。 Offtopic tho ... – stroncium

-1

如果您使用的try-catch,你可以檢測codebreak位置:

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) { 
      ... 
     } 
} 
+0

使用異常進行流量控制應該被認爲是不好的做法:http://stackoverflow.com/questions/729379/why-not-use-exceptions-as-regular-flow-of-control –

+0

我是不服氣。我在Neko平臺的try-catch塊中測試了我的代碼,其中有幾個持久循環,性能沒有變化。我會說:把try-catch塊放到循環中是一個壞主意,而try-catch中的循環並沒有太大的區別。拋出是關於(糾正我,如果我錯了):1.定位到catch塊的堆棧2.恢復先前的寄存器3.傳遞拋出的對象(可以優化爲靜態對象而不是新創建)。如果你問我,有些虛擬機的性能不佳沒有真正的原因。 – Vox

+0

但這不是重點:可以通過使用返回而不是拋出的函數來做同樣的事情。然而,如果編譯器決定創建一個本地函數,這個函數會在堆上的這個函數中使用所有外部變量的副本,那麼內聯這樣的函數可能是一個壞主意。 – Vox

相關問題