亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

func 關鍵字后的兩個函數名稱 - 它是什么?

func 關鍵字后的兩個函數名稱 - 它是什么?

Go
胡子哥哥 2023-05-22 17:04:53
最后一個函數怎么理解?為什么我們在func聲明后使用不同的函數名稱?如何使用這些功能?像main函數中顯示的那樣使用它是錯誤的。package mainimport (    "fmt")func main() {    fmt.Println(incrementer()) //error}func incrementer() func() int { //what is it?!    i := 0    return func() int {        i++        return i    }}
查看完整描述

2 回答

?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

這只是意味著該函數正在返回一個不帶參數并返回整數的函數。那就是


... func() int 

你簽名的一部分在說。


您收到的錯誤是因為您 fmt.Println 無法打印函數。為了證明這一點,你可以看到如果你打電話,你會得到同樣的錯誤,


func main() {

    fmt.Println(foo)

}


func foo() int {

  return 1

}

如果你這樣調用你的函數,可能會更清楚地看到發生了什么。


func main() {

    myIncrementer := incrementer()

    fmt.Println(myIncrementer()) // Prints 1

}

你在哪里創建增量器,它是一個函數,然后調用返回 1 的函數函數。


查看完整回答
反對 回復 2023-05-22
?
鳳凰求蠱

TA貢獻1825條經驗 獲得超4個贊

簡單地說,由于incrementer()返回一個函數,它返回的函數也必須被調用。你可以這樣做:

functionFoo := incrementer()
fmt.Println(functionFoo())

或者這種簡寫的方式:

fmt.Println(incrementer()())

這實現了同樣的事情,你只是立即執行返回的函數incrementer()。


查看完整回答
反對 回復 2023-05-22
  • 2 回答
  • 0 關注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號