Go支持在函数内部嵌套结构,但除了lambda之外没有嵌套函数,这是否意味着无法在函数内部定义嵌套类?
func f() { // nested struct Cls inside f type Cls struct { ... } // try bounding foo to Cls but fail func (c *Cls) foo() { ... } }
因此,类在函数内部被削弱感到有点奇怪。
有什么提示吗?
实际上,无论您要声明 带有 接收器还是 不 带有接收器的函数都没有关系:不允许在Go中嵌套函数。
尽管您可以使用函数文字来实现以下目的:
func f() { foo := func(s string) { fmt.Println(s) } foo("Hello World!") }
在这里,我们创建了一个foo具有函数类型的变量,并将其分配给另一个函数f。调用“外部”函数f输出:"Hello World!"符合预期。
foo
f
"Hello World!"
在Go Playground上尝试一下。