函式 延遲呼叫的用途

2021-10-25 08:31:04 字數 776 閱讀 2317

在設計層面錯誤和異常代表了兩種概念,實現上沒有抽象概念,異常和錯誤實際上是抽象層面的事情。

假設錯誤代表了意外,那麼異常可以理解一種可控的意外。

從 cpu 什麼或者從彙編層面上來說,不存在錯誤和異常。因為哪怕就是乙個浮點計算錯誤或許被零除 cpu 實際上作業系統對這個事情都是有預案的,它並沒有導致計算機崩潰。

那也就是不管 cpu,還是作業系統對這個事都有乙個預案,那麼我們可不可以認為根本不存在錯誤和異常,在實現層面上沒有這種東西。如果底層沒有這種東西的話,那我們實際上就得放棄從底層來研究這些東西。

錯誤或者異常實際上可以看成第二種控制流。我們正常乙個流控制是一條線,因為種種原因會發生另外一種條件。比如需要的檔案找不著了、訪問非法記憶體。在這裡面隱隱約約會出現第二套控制流,實際上錯誤或者異常是備用邏輯、冗餘方案,它本身也是正常的操作。

作業系統為了保護自己會阻止一些事情違反了它的保護的一些機制,違反約定,對作業系統來說,它會觸發它另外一套機制,那顯然是一種非常正常的邏輯,無非不受我們控制。

某些的情況下,我們是很難捕獲到一些什麼系統層面的異常,比如 runtime 層面 os 層面的一些異常,這種異常最終是被許可權級別更高的執行時或者作業系統捕獲,同時我們捕獲我們需要控制的東西。

所以從這一點上來說,自然語言裡的錯誤並不適合把 error 或者 throw 一一對應。在程式設計體系裡面,error 代表的不是錯誤而是另外一套邏輯。

我們可以主動地丟擲異常改變流程控制,比如丟擲異常來表達沒有操作許可權,通過異常可以跳過普通的函式呼叫體系實現遠端跳轉。跳轉邏輯是限制在**層面,異常實際上是在邏輯層面上完成這件事情。

Swift Defer 延遲呼叫

func checksomething func dosomething print checkpoint 3 checkpoint 1,checkpoint 2,checkpoint 3,clean up here,checkpoint 4 checksomething 在你的 塊就要結束前。如果...

Swift延遲載入的一種用途

有以下一種情況 我們試圖用cocoa的語音合成類nsspeechsynthesizer來完成對字串的朗讀,這很容易.但是我們還有乙個附加條件,就是在朗讀完一段文字後觸發乙個動作.這貌似也不難,我們只要遵守nsspeechsynthesizerdelegate協議即可,但是光這樣還不行,我們還必須將n...

函式指標的用途

1 函式指標簡介 函式指標是指向函式的指標變數。因而 函式指標 本身首先應是指標變數,只不過該指標變數指向函式。每乙個函式都有乙個入口位址,該入口位址就是函式指標所指向的位址。有了指向函式的指標變數後,可用該指標變數呼叫函式,就如同用指標變數可引用其他型別變數一樣,在這些概念上是一致的。函式指標有兩...