跳轉到內容

鸚鵡虛擬機器/異常處理

來自華夏公益教科書,開放的書本,開放的世界

異常是程式中發生的錯誤。然而,與導致程式意外終止的普通錯誤不同,異常是可控的,並且可以在不重新啟動程式的情況下恢復。

在 Parrot 中,異常是物件。這意味著您可以使用 new 關鍵字建立異常,並使用該物件的方法來操作異常。在我們進一步討論異常之前,我們需要討論一些術語。熟悉其他程式語言中異常的讀者可能可以跳過這些定義。

丟擲
丟擲異常意味著建立一個異常物件。一旦建立了異常,系統就會進入一種“恐慌狀態”,它會嘗試修復異常。如果無法修復異常,程式將終止。
引發
引發異常與丟擲異常相同。
處理程式
處理程式是可以修復異常的例程。當引發異常並且系統進入恐慌模式時,它會查詢處理程式。如果有可用的處理程式,則異常將被髮送到該處理程式。如果沒有任何處理程式可以處理異常,系統將終止。
捕獲
接收異常物件的處理程式被稱為“捕獲”它。每當丟擲異常時,都應該有一個處理程式來捕獲它。同樣,如果沒有任何處理程式可以捕獲異常,Parrot 將退出。
重新丟擲
並非所有處理程式都能夠處理所有異常。如果處理程式捕獲了無法修復的異常,它可以選擇重新丟擲該異常。重新丟擲會導致系統搜尋不同的處理程式。

建立異常

[編輯 | 編輯原始碼]

在 PIR 中建立新的異常物件非常簡單

$P0 = new 'Exception'

異常類似雜湊,這意味著它們具有命名的欄位。其中一個欄位是 '_message' 欄位,它包含異常的名稱。異常處理程式將檢查名稱以確定它們是否可以處理特定異常,或者是否需要重新丟擲它。

建立處理程式

[編輯 | 編輯原始碼]

在 Parrot 中,處理程式是一個標籤,系統在發生異常時會跳轉到該標籤。這些標籤儲存在堆疊結構中。最頂層的異常處理程式接收指令,但如果它重新丟擲,異常將向下傳播到異常堆疊,直到最終被處理。


前一個 鸚鵡虛擬機器 下一個
多執行緒和併發 類和物件
華夏公益教科書