英文:
go playground # 23 return issue
问题
以下是代码的翻译:
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)
}
// 这里不能使用 v
return lim
}
func main() {
fmt.Println(
pow(3, 2, 10),
pow(3, 3, 20),
)
}
为什么输出结果是:
27 >= 20
9 20
而不是:
9
27 >= 20 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),
)
}
why the output is
27 >= 20
9 20
but not
9
27 >= 20 20
答案1
得分: 3
你期望结果的代码如下:
func main() {
fmt.Println(pow(3, 2, 10))
fmt.Println(pow(3, 3, 20))
}
在调用所有的 "pow" 函数之后,"fmt.Println" 会打印出 pows 的结果。
英文:
the code for your expected result is
func main(){
fmt.Println(pow(3, 2, 10))
fmt.Println(pow(3, 3, 20))
}
After all "pow" functions in "fmt.Println" are called,
"fmt.Println" prints the results of pows
答案2
得分: 2
因为pow(..)
的两个调用在被作为参数传递给fmt.Println()
之前就已经被计算了。
你期望的输出应该是:
func main() {
fmt.Println(pow(3, 2, 10))
fmt.Println(pow(3, 3, 20))
}
英文:
Because both calls to pow(..)
are evaluated before fmt.Println()
as they are used as arguments to it.
What you expected would have been the output of
func main() {
fmt.Println(pow(3, 2, 10))
fmt.Println(pow(3, 3, 20))
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论