问题内容 在 Go 中编写嵌套函数时,编译器如何处理它?它是变成另一个函数并放在代码之外,还是在调用父函数时重新创建它? 例如: func funca() int { a :=
在 Go 中编写嵌套函数时,编译器如何处理它?它是变成另一个函数并放在代码之外,还是在调用父函数时重新创建它?
例如:
func funca() int {
a := 0
funcb := func(_a int) int {
return _a
}
return funcb(a)
}
这个函数是按如下方式编译的吗?
func FuncA() int {
a := 0
return _funcB(a)
}
func _funcB(_a int) int {
return _a
}
或者它是否完全按照编写的方式编译,这意味着每当调用 funca
时都会为 funcb
的定义分配新内存?
嵌套函数编译一次。
由于 FuncB 不会关闭周围作用域中的变量,因此 FuncA 不会分配堆内存。
如果 FuncB 关闭周围范围内的任何变量,那么这些变量将在堆上分配。函数本身被编译一次。
以上就是Go 的编译器如何处理嵌套函数?的详细内容,更多请关注编程网其它相关文章!
--结束END--
本文标题: Go 的编译器如何处理嵌套函数?
本文链接: https://lsjlt.com/news/561094.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0