Golang 多值函数组合

标签 go function-composition

我还没有在 SO 上找到答案的简短问题:当内部函数有多个返回值时,如何编写复合函数调用?

子问题:是否可以在不使用临时变量的情况下只转换多值函数的一个返回值?

示例:http://play.golang.org/p/intnxkzSO1

package main

import "fmt"

func multiReturn() (int, int) {
    return 0, 1
}

func noOp(a int) int {
    return a
}

func main() {

    // Too many arguments
    fmt.Print(noOp(multiReturn()))

    // multiple-value in single-value context
    fmt.Print(string(multiReturn()))
}

最佳答案

你可以让你的外部函数匹配内部函数的返回值

func multiReturn() (int, int) {
    return 10, 1
}

func noOp(a, _ int) int {
    return a
}

func main() {
    fmt.Printf("%v\n", noOp(multiReturn()))             // output: 10
    fmt.Printf("%s", strconv.Itoa(noOp(multiReturn()))) // output: 10
}

注意 string(int) 不起作用,您必须使用 strconv 包。

play

另一种选择是使用 variadic参数。

func noOp(a ...int) int {
    if len(a) > 0 {
        return a[0]
    }
    return 0
}

关于Golang 多值函数组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26692327/

相关文章:

c++ - 有没有办法在 C++ 中创建组合函数编译时数组?

scala - 组合具有多个参数的函数

java - Java 8 中的 Monadic 函数组合与链接

Haskell:用两个 float 参数组合函数失败

go - -bash : set: -g: invalid option when I setting GOPATH

GOPATH 为空(Gogland IDE)

go - 我如何让 "go get"在网络上而不是在我的计算机上查看

scala - 不同类型任务的功能组合 - Scala

go - 导入语句前面的下划线是什么意思?

go - 如何使 LiteIDE 为 *big.Int(或您的类型)显示用户友好的监视字符串?