评估延迟函数参数
问题: 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") }
求值顺序:
结论:
当使用 defer 语句时,延迟函数的参数会立即计算。此过程确保函数在执行时可以访问变量的最新值。然而,延迟函数的实际执行会被延迟,直到周围函数返回为止。
以上是Go 中的延迟函数参数会发生什么?的详细内容。更多信息请关注PHP中文网其他相关文章!