在 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 的编译器如何处理嵌套函数?的详细内容。更多信息请关注PHP中文网其他相关文章!