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

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

將函數的值作為輸入參數返回給另一個

將函數的值作為輸入參數返回給另一個

Go
30秒到達戰場 2021-12-07 19:35:45
如果我有func returnIntAndString() (i int, s string) {...}我有:func doSomething(i int, s string) {...}然后我可以成功執行以下操作:doSomething(returnIntAndString())但是,假設我想為 doSomething 添加另一個參數,例如:func doSomething(msg string, i int, s string) {...}如果我這樣稱呼它,則在編譯時 Go 會抱怨:doSomething("message", returnIntAndString())和:main.go:45: multiple-value returnIntAndString() in single-value contextmain.go:45: not enough arguments in call to doSomething()有沒有辦法做到這一點,或者我應該放棄并將返回值分配returnIntAndString給某些引用并傳遞 msg 和這些值,例如doSomething(msg, code, str)?
查看完整描述

2 回答

?
泛舟湖上清波郎朗

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

它在規范中描述here。它要求內部函數為所有參數返回正確的類型。不允許額外參數以及返回多個值的函數。


作為一種特殊情況,如果函數或方法 g 的返回值在數量上相等并且可以單獨分配給另一個函數或方法 f 的參數,那么調用 f(g(parameters_of_g)) 將在綁定返回值后調用 f g 到 f 的參數的順序。除了 g 的調用外,f 的調用不能包含任何參數,并且 g 必須至少有一個返回值。如果 f 有一個最終的 ... 參數,它會被分配給常規參數分配后保留的 g 的返回值。


func Split(s string, pos int) (string, string) {

  return s[0:pos], s[pos:]

}


func Join(s, t string) string {

  return s + t

}


if Join(Split(value, len(value)/2)) != value {

  log.Panic("test fails")

}

如果不滿足這些特定條件,則需要分配返回值并單獨調用該函數。


查看完整回答
反對 回復 2021-12-07
?
莫回無

TA貢獻1865條經驗 獲得超7個贊

我有同樣的問題。我能想到的最佳解決方案是為我想要的額外參數創建類型或結構,并為它們編寫方法,如下所示:


package main


import (

    "fmt"

)


type Message string


type MessageNumber struct {

    Message string

    Number int

}


func testfunc() (foo int, bar int) {

    foo = 4

    bar = 2

    return

}


func (baz Message) testfunc2(foo int, bar int) {

    fmt.Println(foo, bar, baz)

}


func (baz MessageNumber) testfunc3(foo int, bar int) {

    fmt.Println(foo, bar, baz.Number, baz.Message)

}


func main() {

    Message("the answer").testfunc2(testfunc())

    MessageNumber{"what were we talking about again?", 0}.testfunc3(testfunc())

    fmt.Println("Done.  Have a day.")

}

輸出如下所示:


user@Frodos-Atari-MEGA-STE:~/go/test$ go run main.go

4 2 the answer

4 2 0 what were we talking about again?

Done.  Have a day.


查看完整回答
反對 回復 2021-12-07
  • 2 回答
  • 0 關注
  • 297 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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