回答

收藏

在 Go 中不允许嵌套函数声明可以缓解哪些问题?

技术问答 技术问答 306 人阅读 | 0 人回复 | 2023-09-12

Lambda 按预期工作:
& X0 M: `) K( n! p/ C% P; l% S[code]func main()      inc := func(x int) int { return x code]但声明中不允许使用以下声明:6 J) [8 k2 t5 m/ J  V9 t8 b
[code]func main()      func inc(x int) int { return x code]嵌套函数不允许的原因是什么?
8 V0 Q, j! d! U3 c" V; Y5 A; s- F                                                                  t! G) l) m7 {/ s% P! a* f: h) [
    解决方案:                                                                - B- z2 k/ ^4 R& }( b* j
                                                                我认为不允许使用这种明显功能的原因是 3 6 w8 k4 I: Y8 z, T
[ol]它使编译器稍微复杂一些。编译器知道所有的函数都在顶层。. x1 a2 H( G, j$ ^$ J- @0 _4 c
它会导致一种新的程序员错误——你可能会重建一些东西,并意外地嵌套一些函数。  V1 n* p+ Y- y# V0 v* T  `0 k
使用不同的语法作为函数和闭包是一件好事。制作闭包可能比制作函数更贵,所以你应该知道你在样做。[/ol]这些只是我的意见 - 我还没有看到语言设计师的官方声明。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则