换行打印执行流程
Printing execution flow with new line
package main
import (
"fmt"
"math"
)
func pow(x, n, lim float64) float64 {
if v := math.Pow(x, n); v < lim {
return v
} else {
fmt.Printf("%g >= %g\n", v, lim)
}
// can't use v here, though
return lim
}
func main() {
fmt.Println(
pow(3, 2, 10),
pow(3, 3, 20),
)
}
此代码来自"A Tour of GO"
期望:
9
10
27 >= 20
20
输出:
27 >= 20
9 20
我不明白这个。帮帮我!
Println
函数将在一行中输出两个 pow
函数,然后在从 Println 函数返回后添加 \n
。
package main
import (
"fmt"
"math"
)
func pow(x, n, lim float64) float64 {
if v := math.Pow(x, n); v < lim {
return v
}else {
fmt.Printf("%g >= %g\n", v, lim)
}
// can't use v here, though
return lim
}
func main() {
fmt.Println(pow(3, 2, 10))
fmt.Println(pow(3, 3, 20))
}
和 10
是 first if case 永远不会打印的限制。
9
10
27 >= 20
20
因为pow
函数在函数之前返回
首先评估参数,pow
内的 Println
在 if
块中,因此它有条件地运行。
首先,计算 main()
中 Println
的参数。第一次调用 pow
导致 9
小于 lim
,因此 pow
本身不打印任何内容并且 returns 9
。第二次调用 pow
导致 27
大于 lim
,因此 pow
打印 27 >= 20
和 returns 20
。然后,在处理参数后,执行 main 中对 Println
的调用,打印 9 20
.
package main
import (
"fmt"
"math"
)
func pow(x, n, lim float64) float64 {
if v := math.Pow(x, n); v < lim {
return v
} else {
fmt.Printf("%g >= %g\n", v, lim)
}
// can't use v here, though
return lim
}
func main() {
fmt.Println(
pow(3, 2, 10),
pow(3, 3, 20),
)
}
此代码来自"A Tour of GO"
期望:
9
10
27 >= 20
20
输出:
27 >= 20
9 20
我不明白这个。帮帮我!
Println
函数将在一行中输出两个 pow
函数,然后在从 Println 函数返回后添加 \n
。
package main
import (
"fmt"
"math"
)
func pow(x, n, lim float64) float64 {
if v := math.Pow(x, n); v < lim {
return v
}else {
fmt.Printf("%g >= %g\n", v, lim)
}
// can't use v here, though
return lim
}
func main() {
fmt.Println(pow(3, 2, 10))
fmt.Println(pow(3, 3, 20))
}
和 10
是 first if case 永远不会打印的限制。
9
10
27 >= 20
20
因为pow
函数在函数之前返回
首先评估参数,pow
内的 Println
在 if
块中,因此它有条件地运行。
首先,计算 main()
中 Println
的参数。第一次调用 pow
导致 9
小于 lim
,因此 pow
本身不打印任何内容并且 returns 9
。第二次调用 pow
导致 27
大于 lim
,因此 pow
打印 27 >= 20
和 returns 20
。然后,在处理参数后,执行 main 中对 Println
的调用,打印 9 20
.