亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

可變參數函數是否是可選參數的合適解決方案?

可變參數函數是否是可選參數的合適解決方案?

Go
UYOU 2021-05-09 14:13:44
如果我有一個函數,其中最后一個參數是可選的,那么使用適當的做法...允許該參數是可選的還是不正確的形式?例子:func Foo(s ...string) {    switch len(s) {        case 0:            fmt.Println("You didn't pass an argument")        case 1:            fallthrough        default:            fmt.Printf("You passed %s\n", s[0])    }}Foo("bar")        // "You passed bar"Foo()             // "You didn't pass an argument"Foo("bar", "baz") // "You passed bar"在這個例子中,我不在乎是否傳遞了太多的參數,但是我可以default:在需要時處理。
查看完整描述

3 回答

?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

我不會推薦這個。(ab)使用可變參數傳遞可選參數有不同的問題。其中最重要的可能是后一種形式arg ...T)僅允許一種類型。對于一個以上具有多個類型的可選參數,可以使用一個參數,...interface{}但是這會導致不必要的運行時(取消裝箱)成本,并且缺少任何(usefull)編譯時類型檢查。

另一個可能的反對意見是,我認為您不會在標準庫中的任何地方找到該示例/先例,有些人將其視為非正式的Go編碼風格指南。


查看完整回答
反對 回復 2021-05-17
?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

如果確實需要可選參數(從Go stdlib中可以看到,這種情況很少見),慣用的方法是為每個可選參數定義一個帶有字段的結構,然后調用者可以將帶有字段的結構文字傳遞給他們想要填寫。

更常見的是在大多數情況下只有一個或兩個“可選”參數時提供替代函數或方法。

像Python這樣的語言中的可選參數通常意味著,API會不斷增長,直到函數和方法具有的參數超出任何人都無法記住的程度為止,而且永遠不清楚不清楚各種參數組合如何相互作用(并且甚至未經測試)。

強迫您為各種參數組合定義顯式函數和方法需要對API進行更深入的了解,但從長遠來看,它將更加有用和可維護。


查看完整回答
反對 回復 2021-05-17
?
呼如林

TA貢獻1798條經驗 獲得超3個贊

這完全取決于您的項目要求,如果您的項目處于這種情況下,那么就不會有任何不好的形式

僅在這種情況下才提供可選參數功能。


查看完整回答
反對 回復 2021-05-17
  • 3 回答
  • 0 關注
  • 194 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號