gpt4 book ai didi

recursion - Go 中的短变量声明和长变量声明之间的闭包范围区别是什么?

转载 作者:IT老高 更新时间:2023-10-28 13:05:17 24 4
gpt4 key购买 nike

根据我对规范的阅读:

A short variable declaration ... is a shorthand for a regular variable declaration with initializer expressions but no types...

http://golang.org/ref/spec

我还以为两者是一样的:

var f func()
f = func() {
...
}

f := func() {
...
}

但似乎他们不是。我试图在外部函数中包装一个自递归函数,但这有效:

func myOuter() {
var f func()

f = func() {
f()
}

f()
}

但这没有,在内部函数中说 undefined: f

func myOuter() {
f := func() {
f()
}

f()
}

那么有什么区别呢?有没有办法用简短的声明来写这个,或者我必须把它写出来?

最佳答案

f := func() {/* ... */} 等同于 var f func() = func() {/* ... */} (但在包级别只允许后一个)。在您的特定情况下,这两种变体都不起作用,因为该语句将从右到左进行评估。解决方案是 - 正如您已经建议的那样 - 将语句分成两部分。一个用于声明变量,另一个用于为其分配递归函数。

关于recursion - Go 中的短变量声明和长变量声明之间的闭包范围区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11382846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com