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

為了賬號安全,請及時綁定郵箱和手機立即綁定

函數變量的傳遞過程

員工ID生成器定義了一個函數,EmployeeIdGenerator

main函數先執行,定義了變量generator 屬于?EmployeeIdGenerator的函數類型

并給變量 generator進行賦值

賦值過程中啟動了 appendSn 函數,這個函數最終反回了一個 string,并把這個string賦值給了generator

最后打印時,執行了generateId這個函數,像函數內傳遞兩個變量

這時,generateId這個函數接收到并在自己函數內部使用的變量【generator?EmployeeIdGenerator】

要怎么去理解?他接收到的值是個應該是個函數,但在這個函數內部的使用有點沒看懂。請老師給講解一下好嗎

正在回答

2 回答

個人理解:我覺得是main函數里,首先聲明"generator"變量,再給"generator"變量賦值,最后將"generator"作為"generateId"函數的形參傳入了函數里去執行相關邏輯

0 回復 有任何疑惑可以回復我~

我說下我的理解,我是個菜雞,所說的僅是我個人理解,不一定對,講出來也不是為了誤導各位,只是給個想法,其他同學也多個考慮的方向;

package main

import (

? ? "fmt"

"strconv"

"sync/atomic"

)


type EmployeeIdGenerator func(company string, department string, sn uint32) string

var company = "Gophers"

var sn uint32


func generateId(generator EmployeeIdGenerator, department2 string) (string, bool) {

//這里修改變量department為department2,會好理解一點

if generator == nil {

return "", false


newSn := atomic.AddUint32(&sn, 1)

return generator(company, department2, newSn), true

}


func appendSn(firstPart string, sn uint32) string {

return firstPart + strconv.FormatUint(uint64(sn), 10)

}


func main() {

var generator EmployeeIdGenerator

generator = func(company string, department string, sn uint32) string {

? ? return appendSn(company+"-"+department+"-", sn)

}

fmt.Println(generateId(generator, "RD"))

}

從main函數看,先執行generateId函數,返回值為 generator("Gophers", "RD", 1), true

generator 再執行重寫的方法 返回值為?appendSn("Gophers"+"-"+"RD"+"-", 1)

最終結果為?Gophers-RD-1 true



0 回復 有任何疑惑可以回復我~
#1

nitros 提問者

感謝回答。但是我也是小白,大家一起進步。 但是我覺得先看main函數的話,應該是先觸發了變量定義的appendSn函數,這時給變量generator賦值了吧?然后把這個值變量傳遞給了函數generateId。這個時候才啟動了generateId這個函數,并在函數印數部分設置了該函數下應用的引數接收了變量。同樣的在該變量下另一個引數department2只是接引了“RD”這個數字串,所以是department還是department2都一樣的。 我最終理解為,傳過來的數值是nil就報false。不是的話就按照定好的函數結構EmployeeIdGenerator一一導入變量。結束。
2019-12-09 回復 有任何疑惑可以回復我~
#2

慕函數7347090 回復 nitros 提問者

我理解 generator EmployeeIdGenerator 這個的意思是,因為generator的類型是一個函數,所以在后面需要跟函數類型聲明
2020-01-01 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
Go語言第一課
  • 參與學習       108029    人
  • 解答問題       153    個

Go語言入門教程,編程之必備知識擴散,打好Go語言編程基礎

進入課程

函數變量的傳遞過程

我要回答 關注問題
微信客服

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

幫助反饋 APP下載

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

公眾號

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