Go 中函數內的巢狀類別
Go 允許在函數內嵌套結構體以實現封裝目的。然而,問題出現了:是否有一種機制可以在函數中定義嵌套類別?
在 Go 中,除了 lambda 之外,不允許巢狀函數。此限制引發了對函數內類別功能的擔憂。
為了擴展此問題,以下程式碼範例說明了限制:
<code class="go">func f() { // Nested struct Cls inside f type Cls struct { // ... } // Attempt to bind foo to Cls (fails) func (c *Cls) foo() { // ... } }</code>
此程式碼嘗試在函數內建立巢狀類別Cls f,但嘗試將方法foo 綁定到Cls 失敗。看起來類別在函數中被削弱了。
為了解決這個限制,Go 提供了函數字面量的概念。函數文字允許您聲明函數並將其指派給變數。使用這種方法,您可以建立類似於巢狀函數的內容:
<code class="go">func f() { foo := func(s string) { fmt.Println(s) } foo("Hello World!") }</code>
在此範例中,建立了函數文字 foo 並將其指派給函數 f 中的變數。呼叫 f 輸出“Hello World!”正如預期的那樣。
雖然函數文字為巢狀函數提供了一種解決方法,但值得注意的是,它們不是真正的巢狀函數,並且與其他語言中的巢狀類別相比具有一定的局限性。
以上是Go 函數中是否可以使用巢狀類別功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!