第一版是針對 Lua 5.0 編寫的。雖然對後續版本來說,內容仍然有很大的相關性,但還是有些差異。
第四版針對 Lua 5.3,可在 Amazon 和其他書店購買。
購買本書,您也同時 贊助了 Lua 專案。
![]() |
用 Lua 程式設計 | ![]() |
第四部分。C API 第 24 章。C API 概觀 |
通常,您的應用程式碼會執行不受保護。因為它的程式碼不是由 Lua 呼叫的,所以 Lua 無法設定適當的內容來捕捉錯誤(也就是說,它無法呼叫 setjmp
)。在這種環境中,當 Lua 遇到「記憶體不足」等錯誤時,它能做的並不多。它會呼叫一個恐慌函式,如果函式回傳,就會退出應用程式。(您可以使用 lua_atpanic
函式設定自己的恐慌函式。)
並非所有 API 函式都會擲回例外。lua_open
、lua_close
、lua_pcall
和 lua_load
函式都是安全的。此外,大多數其他函式只有在記憶體配置失敗時才會擲回例外:例如,如果沒有足夠的記憶體來複製檔案名稱,luaL_loadfile
函式就會失敗。許多程式在記憶體用盡時無能為力,所以它們可能會忽略這些例外。對於那些程式來說,如果 Lua 記憶體用盡,恐慌是沒問題的。
如果您不希望應用程式在記憶體配置失敗時結束,則必須在受保護模式下執行您的程式碼。大多數(或全部)的 Lua 程式碼通常會透過呼叫 lua_pcall
來執行;因此,它會在受保護模式下執行。即使在記憶體配置失敗時,lua_pcall
仍會傳回錯誤碼,讓直譯器保持一致的狀態。如果您還想保護所有與 Lua 互動的 C 程式碼,則可以使用 lua_cpcall
。(請參閱參考手冊以取得此函式的更多詳細資訊;請參閱 Lua 發行版中的檔案 lua.c
以取得其使用範例。)
版權所有 © 2003–2004 Roberto Ierusalimschy。保留所有權利。 | ![]() |