去操场#23返回问题

时间:2013-12-25 15:32:56

标签: go

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

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),
    )
}

为什么输出

27 >= 20
9 20

但不是

9
27 >= 20 20

2 个答案:

答案 0 :(得分:3)

预期结果的代码是

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

调用“fmt.Println”中的所有“pow”函数后, “fmt.Println”打印出pows的结果

答案 1 :(得分:2)

因为pow(..)的所有调用都在fmt.Println()之前进行了评估,因为它们被用作参数。

你所期望的是

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