函數(shù)變量的傳遞過程
員工ID生成器定義了一個函數(shù),EmployeeIdGenerator
main函數(shù)先執(zhí)行,定義了變量generator 屬于?EmployeeIdGenerator的函數(shù)類型
并給變量 generator進行賦值
賦值過程中啟動了 appendSn 函數(shù),這個函數(shù)最終反回了一個 string,并把這個string賦值給了generator
最后打印時,執(zhí)行了generateId這個函數(shù),像函數(shù)內(nèi)傳遞兩個變量
這時,generateId這個函數(shù)接收到并在自己函數(shù)內(nèi)部使用的變量【generator?EmployeeIdGenerator】
要怎么去理解?他接收到的值是個應(yīng)該是個函數(shù),但在這個函數(shù)內(nèi)部的使用有點沒看懂。請老師給講解一下好嗎
2021-01-15
個人理解:我覺得是main函數(shù)里,首先聲明"generator"變量,再給"generator"變量賦值,最后將"generator"作為"generateId"函數(shù)的形參傳入了函數(shù)里去執(zhí)行相關(guān)邏輯
2019-12-06
我說下我的理解,我是個菜雞,所說的僅是我個人理解,不一定對,講出來也不是為了誤導(dǎo)各位,只是給個想法,其他同學(xué)也多個考慮的方向;
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函數(shù)看,先執(zhí)行g(shù)enerateId函數(shù),返回值為 generator("Gophers", "RD", 1), true
generator 再執(zhí)行重寫的方法 返回值為?appendSn("Gophers"+"-"+"RD"+"-", 1)
最終結(jié)果為?Gophers-RD-1 true