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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

描述任何 go 函數(shù)的類型

描述任何 go 函數(shù)的類型

Go
慕妹3146593 2022-06-01 16:18:41
我想編寫一個將函數(shù)部分應(yīng)用于參數(shù)的函數(shù),如下所示:func partial(f AnyFuncType, arg interface{}) AnyFuncType {   return func(args ...interface{}) interface{} {        return f(arg, args)   }}type AnyFuncType func(args ...interface{}) interface{}但是即使使用像這樣最簡單的功能也不起作用func sum(a int, b int) int {  return a + b} func main() {  addToFive := partial(sum, 5)}因為我得到./prog.go:16:23: cannot use sum (type func(int, int) int) as type AnyFuncType in argument to partial編譯錯誤?,F(xiàn)在,我知道我可以使用 interface{},但是有沒有辦法為 f 指定一個更精確的類型,它可以與任何函數(shù)一起使用?
查看完整描述

3 回答

?
米琪卡哇伊

TA貢獻(xiàn)1998條經(jīng)驗 獲得超6個贊

您試圖將interface{}其視為泛型類型,但interface{}不是泛型類型,并且 go 將不匹配interface{}作為采用具體類型的函數(shù)的簽名的函數(shù)的簽名。



查看完整回答
反對 回復(fù) 2022-06-01
?
回首憶惘然

TA貢獻(xiàn)1847條經(jīng)驗 獲得超11個贊

用于interface{}表示任何類型的函數(shù)。沒有更精確的類型適用于任何功能。


使用反射包來實現(xiàn)partial。


func partial(f interface{}, arg interface{}) interface{} {

    v := reflect.ValueOf(f)

    t := v.Type()


    var in []reflect.Type

    for i := 1; i < t.NumIn(); i++ {

        in = append(in, t.In(i))

    }


    var out []reflect.Type

    for i := 0; i < t.NumOut(); i++ {

        out = append(out, t.Out(i))

    }


    var va reflect.Value

    if arg != nil {

        va = reflect.ValueOf(arg)

    } else {

        // Support `nil` as partial argument.

        va = reflect.Zero(t.In(0))

    }


    return reflect.MakeFunc(reflect.FuncOf(in, out, t.IsVariadic()),

        func(args []reflect.Value) []reflect.Value {

            return v.Call(append([]reflect.Value{va}, args...))

        }).Interface()

}

像這樣使用它:


addToFive := partial(sum, 5).(func(int) int)

fmt.Println(addToFive(1))

在操場上運行它。


我建議使用閉包來創(chuàng)建部分而不是partial這個答案中的函數(shù)。閉包更有效,避免了棘手的反射代碼。


addToFive := func(x int) int { return sum(5, x) }

fmt.Println(addToFive(1))


查看完整回答
反對 回復(fù) 2022-06-01
?
12345678_0001

TA貢獻(xiàn)1802條經(jīng)驗 獲得超5個贊

問題是,GO 中的子類型僅適用于交互。由于 AnyFuncType 不是接口,因此這不起作用。



查看完整回答
反對 回復(fù) 2022-06-01
  • 3 回答
  • 0 關(guān)注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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