Go 中函数内的嵌套类:可能性和限制
在 Go 中,函数内的嵌套结构是允许的,但可以创建嵌套结构函数(除了 lambda 函数)受到限制。这就提出了一个问题:在函数中定义嵌套类真的不可能吗?
为了说明这一点,请考虑以下代码片段:
<code class="go">func f() { // Nested struct Cls within f type Cls struct { //... } // Attempt to bind foo to Cls (fails) func (c *Cls) foo() { //... } }</code>
在此示例中,尝试将函数 foo 定义为嵌套结构 Cls 的成员失败。考虑到嵌套结构提供的灵活性,这种限制可能看起来很不寻常。
但是,重要的是要认识到 Go 中的嵌套函数本质上是不允许的,无论函数是否有接收器。
为了规避这个限制,Go 提供了函数字面量,它允许在其他函数中声明函数,如下所示:
<code class="go">func f() { foo := func(s string) { fmt.Println(s) } foo("Hello World!") }</code>
在这个例子中,在外部函数 f 中,我们创建了一个函数变量 foo 。该变量存储一个可以使用参数“Hello World!”调用的函数。当调用外部函数 f 时,“Hello World!”按预期打印。
这种方法利用函数文字,可以模拟函数内的嵌套类,尽管在某些限制内。
以上是Go 函数中可以存在嵌套类吗?的详细内容。更多信息请关注PHP中文网其他相关文章!