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

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

go中如何編寫函數(shù)?

go中如何編寫函數(shù)?

Go
德瑪西亞99 2023-07-31 15:32:59
我正在嘗試弄清楚如何設(shè)置中間件,現(xiàn)在我得到了類似的東西:func applyMiddleware(h *Handle) *Handle {    return a(b(c(h))) }有沒有一種方法可以“組合”這些函數(shù),以便我只需傳遞句柄列表即可返回組合函數(shù)?
查看完整描述

2 回答

?
慕俠2389804

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

使用切片

https://play.golang.org/p/DrEnGkIEbU3

package main


import (

    "fmt"

)


func main() {

    fmt.Println(v(v(v(0))))

    fmt.Println(compose(v, v, v)(0))

}

func v(i int) int {

    return i + 1

}

func compose(manyv ...func(int) int) func(int) int {

    return func(i int) int {

        for _, v := range manyv {

            i = v(i)

        }

        return i

    }

}


查看完整回答
反對 回復(fù) 2023-07-31
?
達(dá)令說

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

自 Go 1.18 引入泛型以來,您可以定義以下泛型函數(shù)來組合兩個任意函數(shù):


func compose[A any, B any, C any](f func(A) B, g func(B) C) func(A) C {

    return func(a A) C {

        return g(f(a))

    }

}

上面的組合順序compose是從左到右,即compose(f, g)返回函數(shù)“ f后的g ”或g°f,相當(dāng)于Haskell中的以及F#或Elm中的to 。g . ff >> g


換句話說,結(jié)果函數(shù)的輸入 – compose(f, g)– 被饋送到f,然后f的輸出被饋送到g,其輸出是最終結(jié)果:

https://img1.sycdn.imooc.com//64c763dd0001dcfc05710178.jpg

讓我們首先定義Adapter用于表示要編寫的函數(shù)類型的類型:


type Adapter = func(*Handle) *Handle

使用composeand Adapter,您現(xiàn)在可以定義composeAdapters組合任意數(shù)量的這些Adapter函數(shù):


func composeAdapters(adapters ...Adapter) Adapter {

    composition := func(h *Handle) *Handle {

        return h

    }

    for _, adapter := range adapters {

        composition = compose(composition, adapter)

    }

    return composition

}

請注意 被composition初始化為 的恒等函數(shù)*Handle。您可以將其視為無操作適配器:它只是將生成的組合適配器的輸入轉(zhuǎn)發(fā)到鏈中要組合的第一個函數(shù)(如果有)。這也意味著composeAdapters不帶任何參數(shù)的調(diào)用(例如,composeAdapters())會導(dǎo)致無操作適配器:它對輸入不執(zhí)行任何操作*Handle;它只是將其返回。


給定類型的函數(shù)f、g和–即–可以實現(xiàn)為:hAdapterfunc(*Handle) *HandleapplyMiddleware


var applyMiddleware = composeAdapters(f, g, h)

再次注意組合順序:

https://img1.sycdn.imooc.com//64c763ed0001d67407840178.jpg

查看完整回答
反對 回復(fù) 2023-07-31
  • 2 回答
  • 0 關(guān)注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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