我是新手去编程,
假设此代码,其中函数fmt.Printf()
传递两个不同的值
package main
import "fmt"
func main() {
var a int = 150
var b int = 130
var ret1, ret2 int
ret1, ret2 = max(a, b)
fmt.Printf( "Max val: %d Min val: %d\n", ret1, ret2 )
}
func max(num1, num2 int) (int,int) {
if (num1 > num2) {
return num1, num2
} else {
return num2, num1
}
}
而不是传递ret1,fmt.Printf( "Max val: %d Min val: %d\n", ret1, ret2 )
中的ret2有任何办法,我可以直接在max(a, b)
中传递fmt.Printf()
fmt.Printf( "Max val: %d Min val: %d\n", max(a, b))
我试过了,它给出了错误
单值上下文中的多值max()
看起来,返回两个不同的值而不是一个元组,我的回归概念是错误的,或者我做错了。
是否有任何方法可以将多次返回的函数直接传递给函数需要可变数量的值
TIA
答案 0 :(得分:3)
作为一种特殊情况,如果函数或方法g的返回值在数量上相等并且可以单独分配给另一个函数或方法f的参数,那么调用f(g(parameters_of_g))将在绑定后调用f g的返回值依次为f的参数。 f的调用必须不包含除g的调用之外的参数,并且g必须至少具有一个返回值。如果f具有final ...参数,则为其分配在分配常规参数后保留的g的返回值。
您要进行的调用问题是Printf
的其中一个参数不是max
的返回值。这个电话有效:
fmt.Println(max(a, b))
答案 1 :(得分:1)
您可以使用带有可变参数的内联辅助函数执行类似操作。
package main
import "fmt"
func main() {
var a int = 150
var b int = 130
func(i ...int){fmt.Printf( "Max val: %d Min val: %d\n", i[0], i[1] )}(max(a,b))
}
func max(num1, num2 int) (int,int) {
if (num1 > num2) {
return num1, num2
} else {
return num2, num1
}
}
我希望它有所帮助。
请查看https://play.golang.org/p/tB-q8hjNdu以查看其实际效果。