【发布时间】:2014-07-30 18:30:46
【问题描述】:
是否有一种惯用的方法来记录返回多个值的函数的结果?这不会编译:
import "log"
func returnPair() (int,int) {
return 42, 24
}
func main() {
log.Printf("Returned %v", returnPair())
}
prog.go:7: multiple-value returnPair() in single-value context
UPD 摘要(特别感谢@rvigacio):
这是 Go 语法的一个特点:
func eat(args ...interface{}) {}
func eatWithSpice(spice string, args ...interface{}) {}
func main() {
eat(returnPair()) // this works
eatWithSpice("pepper", returnPair()) // this does not
}
作为一种特殊情况,如果一个函数或方法 g 的返回值数量相等并且可以单独分配给另一个函数或方法 f 的参数,则调用 f(g(parameters_of_g)) 将调用f 将 g 的返回值按顺序绑定到 f 的参数后。 f 的调用除了 g 的调用外不能包含任何参数,并且 g 必须至少有一个返回值。如果 f 有一个 final ... 参数,则为其分配 g 的返回值,这些值在分配常规参数后仍然存在。 (http://golang.org/ref/spec#Calls)
【问题讨论】:
-
According to the spec,
eatWithSpice("pepper", returnPair())不是不一致,应该是eatWithSpice("pepper", returnPair()...) -
@rvigacio 不起作用:play.golang.org/p/fz-452hKT7
-
对不起,我错过了你返回多个值,here's the correct explanation:“作为一种特殊情况,如果函数或方法 g 的返回参数数量相等并且可以单独分配给另一个参数函数或方法 f,则调用 f(g(parameters_of_g)) 将 g 的返回值按顺序绑定到 f 的参数后调用 f。不允许函数调用的其他特殊情况。 "
标签: logging go multiple-value