将函数的值作为输入参数返回给另一个

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 [重复]

怎么给参数赋两个值

高阶函数

矩阵作为函数参数的问题

编写一个将向量作为输入的函数,丢弃不需要的值,去重,并返回原始向量的相应索引

是否可以将一个功能“分配”给另一个功能?