第一版是針對 Lua 5.0 編寫的。雖然對後續版本來說,內容仍然有很大的相關性,但還是有些差異。
第四版針對 Lua 5.3,可在 Amazon 和其他書店購買。
購買本書,您也同時 贊助了 Lua 專案


24.3.1 – 應用程式碼中的錯誤處理

通常,您的應用程式碼會執行不受保護。因為它的程式碼不是由 Lua 呼叫的,所以 Lua 無法設定適當的內容來捕捉錯誤(也就是說,它無法呼叫 setjmp)。在這種環境中,當 Lua 遇到「記憶體不足」等錯誤時,它能做的並不多。它會呼叫一個恐慌函式,如果函式回傳,就會退出應用程式。(您可以使用 lua_atpanic 函式設定自己的恐慌函式。)

並非所有 API 函式都會擲回例外。lua_openlua_closelua_pcalllua_load 函式都是安全的。此外,大多數其他函式只有在記憶體配置失敗時才會擲回例外:例如,如果沒有足夠的記憶體來複製檔案名稱,luaL_loadfile 函式就會失敗。許多程式在記憶體用盡時無能為力,所以它們可能會忽略這些例外。對於那些程式來說,如果 Lua 記憶體用盡,恐慌是沒問題的。

如果您不希望應用程式在記憶體配置失敗時結束,則必須在受保護模式下執行您的程式碼。大多數(或全部)的 Lua 程式碼通常會透過呼叫 lua_pcall 來執行;因此,它會在受保護模式下執行。即使在記憶體配置失敗時,lua_pcall 仍會傳回錯誤碼,讓直譯器保持一致的狀態。如果您還想保護所有與 Lua 互動的 C 程式碼,則可以使用 lua_cpcall。(請參閱參考手冊以取得此函式的更多詳細資訊;請參閱 Lua 發行版中的檔案 lua.c 以取得其使用範例。)