在 Go 函数中定义递归函数
Define a recursive function within a function in Go
我正在尝试在 Go 中的另一个函数中定义一个递归函数,但我正在努力获得正确的语法。我正在寻找这样的东西:
func Function1(n) int {
a := 10
Function2 := func(m int) int {
if m <= a {
return a
}
return Function2(m-1)
}
return Function2(n)
}
我想将 Function2 保留在 Function1 的范围内,因为它正在访问其范围内的某些元素。
我如何在 Go 中执行此操作?
非常感谢
var Function2 func(m int) int
Function2 = func(m int) int {
...
如果它在您声明它的行中,您将无法访问其中的 Function2
。原因是您指的不是 function 而是 variable (其类型是函数)并且只有在声明。
引用自Spec: Declarations and scope:
The scope of a constant or variable identifier declared inside a function begins at the end of the ConstSpec or VarSpec (ShortVarDecl for short variable declarations) and ends at the end of the innermost containing block.
在你的例子中Function2
是一个变量声明,VarSpec是:
Function2 := func(m int) int {
if m <= a {
return a
}
return Function2(m-1)
}
正如语言规范描述的引用形式,变量标识符 Function2
只会在声明之后的范围内,因此您不能在声明本身内部引用它。有关详细信息,请参阅 。
首先声明Function2
变量,这样你就可以从function literal:
引用它
func Function1(n int) int {
a := 10
var Function2 func(m int) int
Function2 = func(m int) int {
if m <= a {
return a
}
return Function2(m - 1)
}
return Function2(n)
}
在 Go Playground 上试用。
我正在尝试在 Go 中的另一个函数中定义一个递归函数,但我正在努力获得正确的语法。我正在寻找这样的东西:
func Function1(n) int {
a := 10
Function2 := func(m int) int {
if m <= a {
return a
}
return Function2(m-1)
}
return Function2(n)
}
我想将 Function2 保留在 Function1 的范围内,因为它正在访问其范围内的某些元素。
我如何在 Go 中执行此操作?
非常感谢
var Function2 func(m int) int
Function2 = func(m int) int {
...
如果它在您声明它的行中,您将无法访问其中的 Function2
。原因是您指的不是 function 而是 variable (其类型是函数)并且只有在声明。
引用自Spec: Declarations and scope:
The scope of a constant or variable identifier declared inside a function begins at the end of the ConstSpec or VarSpec (ShortVarDecl for short variable declarations) and ends at the end of the innermost containing block.
在你的例子中Function2
是一个变量声明,VarSpec是:
Function2 := func(m int) int {
if m <= a {
return a
}
return Function2(m-1)
}
正如语言规范描述的引用形式,变量标识符 Function2
只会在声明之后的范围内,因此您不能在声明本身内部引用它。有关详细信息,请参阅
首先声明Function2
变量,这样你就可以从function literal:
func Function1(n int) int {
a := 10
var Function2 func(m int) int
Function2 = func(m int) int {
if m <= a {
return a
}
return Function2(m - 1)
}
return Function2(n)
}
在 Go Playground 上试用。