遅延関数の引数の評価
質問: The Tour of 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 中国語 Web サイトの他の関連記事を参照してください。