2 回答
TA贡献1804条经验 获得超8个赞
不,每次执行语句时,调用的函数值和参数都会像往常一样进行评估,请参阅doc:
作为一种特殊情况,如果一个函数或方法 g 的返回值数量相等并且可以单独分配给另一个函数或方法 f 的参数,则调用 f(g(parameters_of_g)) 将在绑定返回值后调用 f的 g 到 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")
}
如果 f 有一个最终...参数,则为其分配 g 的返回值,这些返回值在分配常规参数后仍然存在。
例如,以下代码有效:
package main
import "fmt"
func main() {
f(200, g())
}
func f(i int, slice ...interface{}) {
fmt.Println(i, slice) // 200 [[1 <nil>]]
}
func g() []interface{} {
return []interface{}{1, nil}
}
- 2 回答
- 0 关注
- 140 浏览
添加回答
举报