1 回答

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個(gè)贊
當(dāng)您將類型參數(shù)約束MF為 時(shí)MapFunc,您無法調(diào)用fn,因?yàn)?的MapFunc類型集中的函數(shù)類型沒有相同的簽名。它們有不同的返回類型[]string和[]bool.
所以fn有效類型的變量不支持被調(diào)用,你會(huì)得到(有點(diǎn)神秘的)錯(cuò)誤信息“無法調(diào)用非函數(shù) fn”。
更正式地說,只能調(diào)用具有類型函數(shù)核心類型MapFunc的值,但約束沒有核心類型。
解決方法是參數(shù)化MapFunc并使用該類型參數(shù)作為返回值,這樣在實(shí)例化時(shí),它就會(huì)有一個(gè)核心類型:
type MapFunc[T MapFuncType] interface {
func(s string, ss []string) []T
}
MFT并使用in實(shí)例化約束Funcy:
func Funcy[MF MapFunc[MFT], MFT MapFuncType](s string, ss []string, fn MF) []MFT {
return fn(s, ss)
}
游樂場:https ://go.dev/play/p/q88aJLgnzXZ
- 1 回答
- 0 關(guān)注
- 279 瀏覽
添加回答
舉報(bào)