評估延遲函數參數
問題: Go 之旅中的一句話立即指出「延遲調用的參數立即指出進行評估。
答案:
在 Go 中,defer 語句會延遲函數的執行,直到封閉函數傳回。但是,延遲函數的參數的評估會立即發生。
分解評估過程:
規範規定對於每個「defer」語句:
函數值:
函數值:
要延遲的函數計算為通常。func def(s string) func() { fmt.Println("tier up") fmt.Println(s) return func() { fmt.Println("clean up") } } func main() { defer def("defered line")() fmt.Println("main") }
延遲函數的參數也會立即計算。
實際的函數呼叫在周圍函數返回之前不會執行。請問def() 參數求值:參數「defered line」立即求值.def() 函數求值:呼叫 def() 函數,列印「tier up」和「defered line」。 延遲函數計算: def() 的回傳值被計算,這是一個函數列印「clean up.」延遲函數執行:當main()返回時,執行延遲函數,列印「清理。」結論:當使用 defer 語句時,延遲函數的參數會立即計算。此過程可確保函數在執行時可以存取變數的最新值。然而,延遲函數的實際執行會被延遲,直到周圍的函數返回。
以上是Go 中的延遲函數參數會發生什麼事?的詳細內容。更多資訊請關注PHP中文網其他相關文章!