2013-05-22 47 views

回答

5

使用lua_pcall當你需要來處理代碼中當時的潛在錯誤。否則,使用lua_call並讓錯誤向上移動呼叫鏈。無需使用lua_pcall無處不在。

lua_call快於lua_pcall

只要確保頂部至少有一個lua_pcall,或者在發現任何Lua錯誤時,您的應用程序將會出現混亂並退出。

+0

「呼叫鏈」是什麼意思?這隻適用於如果調用lua代碼是由C代碼進行的,而C代碼又是由lua調用的?我有點困惑,因爲lua可以在任何時候失敗(分配錯誤),並且C代碼可能取決於被調用者實際上已經執行了它被稱爲執行的動作... –

+0

@R ..,可以忽略從Lua調用的C代碼中的錯誤,因爲它們將在Lua中進行報告。大多數情況下,您只需保護從C到Lua的第一個呼叫,例如在運行腳本時。 – lhf

+5

「*只要確保在頂部或您的應用至少有一個lua_pcall *」這假定Lua負責應用程序,而不是調用Lua執行特定任務的應用程序。 –

5

使用lua_pcall,除非你有一些具體表現情況的所有問題。然後使用lua_call。但是,再次,只有當您有配置文件您的應用程序,並發現具體lua_call將緩解的性能問題。

如果在lua_call期間Lua引發Lua錯誤,那麼您的應用程序已經非常糟糕了。所以你需要確保在可能的情況下使用lua_pcall

+1

我不同意。重點不在於性能:它是報告錯誤的地點和時間。 – lhf

+1

@lhf:是的,一般來說,應該儘快報告和處理錯誤*。這不是帶有異常處理和RAII的C++;一個longjmp到你的應用程序的「頂端」可能會泄漏幾乎所有你曾經創建過的對象* *沒有連接到Lua。在發生這種錯誤後繼續使用應用程序的能力基本上是不可能的。 –

+0

查看Lua源代碼中兩個調用的用法。 – lhf

相關問題