命名回傳值如何與延遲函數互動
在Go 中,命名回傳值允許函數透過名稱指定傳回值,而不是使用位置論點。命名返回值和延遲函數之間的交互可能會令人困惑,如以下示例所示:
func c() (i int) { defer func() { i++ }() return 1 }
根據文檔,該函數預計返回2:“延遲函數可以讀取並分配給返回函數的命名回傳值。
要理解這種行為,重要的是要記住,不帶參數的 return 語句會傳回指定的回傳值,稱為「裸回傳值」。 「返回。範例程式碼回傳1,因為它使用了return 1,它明確地將回傳值指定為1。
延遲函數在return 語句之後執行,遞增i。但是,此增量不會影響命名回傳值i,因為它有效地將新值指派給延遲函數內的局部變數。相當於:
在具有命名返回值變數i 的函數中,賦值i = 1 設定命名回傳值,而return 語句只是退出函數,允許延遲函數執行並修改本地變數i 變數不影響指定的回傳值。
以上是為什麼 Go 中的延遲函數無法增加指定的回傳值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!