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

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

如何用地圖替換多個(gè)“if-else-if”

如何用地圖替換多個(gè)“if-else-if”

Go
Qyouu 2023-07-10 14:33:00
我對(duì)多層 if-else-if 條件感到擔(dān)憂,所以我想通過使用地圖來簡(jiǎn)短說明。請(qǐng)參閱 if-else-if 中的以下代碼,我想用地圖替換它。function, args := APIstub.GetFunctionAndParameters()if function == "queryProduce" {    return s.queryProduce(APIstub, args)} else if function == "initLedger" {    return s.initLedger(APIstub)} else if function == "createProduce" {    return s.createProduce(APIstub, args)} else if function == "queryAllProduces" {    return s.queryAllProduces(APIstub)} else if function == "changeProduceStatus" {    return s.changeProduceStatus(APIstub, args)}return shim.Error("Invalid Smart Contract function name.")}
查看完整描述

2 回答

?
手掌心

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊

對(duì)于你所擁有的來說switch會(huì)很好:

switch function {

case "queryProduce":

? ? return s.queryProduce(APIstub, args)

case "initLedger":

? ? return s.initLedger(APIstub)

case "createProduce":

? ? return s.createProduce(APIstub, args)

case "queryAllProduces":

? ? return s.queryAllProduces(APIstub)

case "changeProduceStatus":

? ? return s.changeProduceStatus(APIstub, args)

}

使用映射會(huì)很不方便,因?yàn)椴⒎撬蟹椒ǘ季哂邢嗤暮灻?,但您可以使用多個(gè)映射。

另一種解決方案可能是使用反射來調(diào)用方法,但同樣,處理不同的參數(shù)會(huì)很不方便。反射也比較慢,更不用說您必須注意不允許調(diào)用不打算公開的方法。


查看完整回答
反對(duì) 回復(fù) 2023-07-10
?
莫回?zé)o

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊

可以將您所擁有的內(nèi)容表達(dá)為地圖。這里的基本設(shè)置是,無論你走哪條路,你都會(huì)得到一些可以不帶參數(shù)調(diào)用的函數(shù),并且它總是返回相同的類型()error。我可能會(huì)明確地傳遞args進(jìn)來。


其高級(jí)結(jié)構(gòu)是具有函數(shù)名稱到函數(shù)的映射,然后調(diào)用所選函數(shù)。


funcMap := map[string]func([]string) error{...}

funcName, args := APIstub.GetFunctionAndParameters()

f := funcMap[funcName]

if f == nil {

    f = func(_ []string) error {

        return shim.Error("Invalid Smart Contract function name.")

    }

}

return f(args)

映射語法變得有點(diǎn)冗長(zhǎng)


funcMap := map[string]func([]string) error{

    "queryProduce": func(args []string) error {

        return s.queryProduce(APIstub, args)

    },

    "initLedger": func(_ []string) error {

        return s.initLedger(APIstub)

    },

}

如果您要在多個(gè)地方調(diào)用它,或者您想要一個(gè)單獨(dú)的驗(yàn)證步驟,如果使用的話將定義一些名稱,或者如果函數(shù)的實(shí)際列表是動(dòng)態(tài)的(您可以添加或刪除東西),那么映射方法會(huì)更好來自運(yùn)行時(shí)的地圖)。initLedger不一致的方法簽名確實(shí)會(huì)帶來復(fù)雜性,并且使所有內(nèi)容保持一致會(huì)有所幫助(即使函數(shù)未使用,也可以采用參數(shù)列表之類的函數(shù))。


在普通代碼中,我希望switch@icza 的答案中的形式更加慣用。


查看完整回答
反對(duì) 回復(fù) 2023-07-10
  • 2 回答
  • 0 關(guān)注
  • 135 瀏覽

添加回答

舉報(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)