将函数的值作为输入参数返回给另一个
Posted
技术标签:
【中文标题】将函数的值作为输入参数返回给另一个【英文标题】:Return values of function as input arguments to another 【发布时间】:2022-01-20 09:48:04 【问题描述】:如果我有
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 context
main.go:45: not enough arguments in call to doSomething()
有没有办法做到这一点,或者我应该放弃并将 returnIntAndString
的返回值分配给一些引用并传递 msg 和这些值,如 doSomething(msg, code, str)
?
【问题讨论】:
如果您发布其余代码会很有帮助 【参考方案1】:我也有同样的问题。我能想到的最佳解决方案是为我想要的额外参数创建类型或结构,并为它们编写方法,如下所示:
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.
【讨论】:
【参考方案2】:它被描述为here in the spec。它要求内部函数为所有参数返回正确的类型。不允许额外的参数以及返回多个值的函数。
作为一种特殊情况,如果函数或方法 g 的返回值是 数量相等且可单独分配给 另一个函数或方法 f,则调用 f(g(parameters_of_g)) 将 将 g 的返回值绑定到 f 的参数后调用 f 为了。 f 的调用必须不包含调用以外的参数 g 的值,并且 g 必须至少有一个返回值。如果 f 有一个final ... 参数,它被赋予 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")
如果不满足这些特定条件,则需要分配返回值并单独调用函数。
【讨论】:
以上是关于将函数的值作为输入参数返回给另一个的主要内容,如果未能解决你的问题,请参考以下文章
将 RDD 的值作为变量传递给另一个 RDD - Spark #Pyspark [重复]