2 回答
TA贡献1780条经验 获得超4个赞
Function2如果它位于您声明它的行中,则您无法访问它内部。原因是您指的不是函数而是变量(其类型是函数),并且只有在声明之后才能访问它。
引用规范:声明和范围:
在函数内声明的常量或变量标识符的范围从 ConstSpec 或 VarSpec(短变量声明的 ShortVarDecl)的末尾开始,并在最里面的包含块的末尾结束。
在您的示例中Function2是一个变量声明,而 VarSpec 是:
Function2 := func(m int) int {
if m <= a {
return a
}
return Function2(m-1)
}
正如语言规范所描述的引用形式,变量标识符Function2只会在声明之后的范围内,所以你不能在声明本身内部引用它。有关详细信息,请参阅了解 Go 中的变量范围。
首先声明Function2变量,以便您可以从函数字面量中引用它:
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上试试。
- 2 回答
- 0 关注
- 306 浏览
添加回答
举报
