第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

調(diào)用泛型函數(shù)類型:無效操作:不能調(diào)用非函數(shù) fn

調(diào)用泛型函數(shù)類型:無效操作:不能調(diào)用非函數(shù) fn

Go
有只小跳蛙 2022-11-23 16:17:35
我將發(fā)布我目前正在處理的代碼示例。我得到了錯(cuò)誤:錯(cuò)誤:無效操作:無法調(diào)用非函數(shù) fn(MapFunc 約束的 MF 類型變量)是否可以使用包含不同函數(shù)簽名的約束以這種方式使用?(如果可能的話,我想了解如何讓我寫的東西首先發(fā)揮作用。)這是示例:package mainimport "fmt"// MapFunc constraint used in Funcytype MapFunc interface {    func(s string, ss []string) []string | func(s string, ss []string) []bool}// MapFuncType used for Funcy return constrainttype MapFuncType interface {    string | bool}// Funcy preforms map operation on generic map functionsfunc Funcy[MF MapFunc, MFT MapFuncType](s string, ss []string, fn MF) []MFT {    return fn(s, ss)    // error: invalid operation: cannot call non-function fn (variable of type    // MF constrained by MapFunc)}// appendTo adds given string to the end of each index of given slice of strings// Ex. appendTo("_", []string{"append", "to"}) --> []string{"append_", "to_"}func appendTo(s string, ss []string) []string {    var slice []string    for _, v := range ss {        slice = append(slice, v+s)    }    return slice}// isMatch checks given string against each index in given string slice for a// match// Ex. isMatch("hi", []string{"hello", "hi"}) --> []bool{false, true}func isMatch(s string, ss []string) []bool {    var slice []bool    for _, v := range ss {        slice = append(slice, s == v)    }    return slice}func main() {    slice1 := []string{"append", "to"}    slice2 := []string{"hello", "hi"}    fmt.Println(Funcy(slice1, appendTo))    // want: []string{"append_", "to_"}    // got: error: cannot infer MFT    fmt.Println(Funcy(slice2, isMatch))    //[]bool{false, true}    // got: error: cannot infer MFT}
查看完整描述

1 回答

?
哈士奇WWW

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


查看完整回答
反對(duì) 回復(fù) 2022-11-23
  • 1 回答
  • 0 關(guān)注
  • 279 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)