Go Playground # 23 返回问题

huangapple go评论82阅读模式
英文:

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
英文:

http://tour.golang.org/#23

package main

import (
    &quot;fmt&quot;
    &quot;math&quot;
)

func pow(x, n, lim float64) float64 {
    if v := math.Pow(x, n); v &lt; lim {
        return v

    } else {
        fmt.Printf(&quot;%g &gt;= %g\n&quot;, v, lim)
    }
    // can&#39;t use v here, though
    return lim
}

func main() {
    fmt.Println(
        pow(3, 2, 10),
        pow(3, 3, 20),
    )
}

why the output is

27 &gt;= 20
9 20

but not

9
27 &gt;= 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))
}

huangapple
  • 本文由 发表于 2013年12月25日 23:32:56
  • 转载请务必保留本文链接:https://go.coder-hub.com/20774317.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定