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