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