Golang 函數中可以巢狀類別嗎?
Golang 允許在函數中巢狀結構體,但不允許在其他函數中巢狀函數(不包括拉姆達函數)。這個限制引發了一個問題:是否可以在 Golang 中的函數內定義巢狀類別。
考慮以下範例:
<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 將會失敗。這可能看起來令人驚訝,因為函數內部的類別並沒有減少。
函數文字來救援
儘管Golang 中不允許在其他函數中巢狀函數,但是使用函數文字的解決方法:
<code class="go">func f() { foo := func(s string) { fmt.Println(s) } foo("Hello World!") }</code>
這裡,我們建立一個function 類型的變數foo,它在另一個函數f 中宣告。呼叫「外部」函數 f 輸出:「Hello World!」正如預期的那樣。
這個解決方案允許我們實現與函數內的嵌套類別類似的行為,儘管使用不同的機制。
以上是Golang 函數中可以存在巢狀類別嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!