第一版是針對 Lua 5.0 編寫的。儘管在很大程度上仍然適用於後續版本,但仍有一些差異。
第四版針對 Lua 5.3,可在 Amazon 和其他書店購買。
購買這本書,您也協助 支援 Lua 專案


24.3 – 使用 C API 進行錯誤處理

與 C++ 或 Java 不同,C 語言不提供例外處理機制。為了改善這個困難,Lua 使用 C 中的 setjmp 設施,這會產生類似於例外處理的機制。(如果您使用 C++ 編譯 Lua,將程式碼變更為使用真正的例外並不困難。)

Lua 中的所有結構都是動態的:它們會根據需要而擴充,並在可能時再次縮小。這表示在 Lua 中,記憶體配置失敗的可能性很普遍。幾乎任何操作都可能面臨這種情況。Lua 使用例外來表示這些錯誤,而不是為其 API 中的每個操作使用錯誤碼。這表示幾乎所有 API 函式都可能會擲回錯誤(即,呼叫 longjmp),而不是傳回。

當我們撰寫函式庫程式碼(即,要從 Lua 呼叫的 C 函式)時,使用長跳躍幾乎和真正的例外處理設施一樣方便,因為 Lua 會捕捉任何偶發錯誤。然而,當我們撰寫應用程式程式碼(即,呼叫 Lua 的 C 程式碼)時,我們必須提供一種方法來捕捉這些錯誤。