5.6.1.1. 函数调用作为函数参数
如果一个函数或方法接受一个或多个参数,我们当然可以传入相应的参数来调用它。此外,我们也可以传入另一个函数或方法来调用该函数,但前提是另一个函数的返回值和类型与要调用的函数参数一致。
下面的函数接受三角形三个边的长度作为参数(三个int类型),并使用Heron公式计算并输出三角形的面积。
1 2 3 4 5 6 7 8 9 10 11 | for i := 1; i <= 4; i++ { a, b, c := PythagoreanTriple(i, i+1) Δ1 := Heron(a, b, c) Δ2 := Heron(PythagoreanTriple(i, i+1)) fmt.Printf("Δ1 == %10f == Δ2 == %10f\n", Δ1, Δ2) } Δ1 == 6.000000 == Δ2 == 6.000000 Δ1 == 30.000000 == Δ2 == 30.000000 Δ1 == 84.000000 == Δ2 == 84.000000 Δ1 == 180.000000 == Δ2 == 180.000000 |
首先,我们使用勾股定理得到边长,然后我们将得到的三个边长作为参数传入Heron()函数,然后我们重复此计算,只是这次我们直接使用PythagoreanTriple()函数作为Heron()函数的参数,利用Go语言特性PythagoreanTriple()函数的三个返回值转换为Heron()函数的三个参数。
1 2 3 4 5 6 7 8 9 10 11 | func Heron(a, b, c int) float64 { α, β, γ := float64(a), float64(b), float64(c) s := (α + β + γ) / 2 return math.Sqrt(s * (s - α) * (s - β) * (s - γ)) } func PythagoreanTriple(m, n int) (a, b, c int) { if m < n { m, n = n, m } return (m * m) - (n * n), (2 * m * n), (m * m) + (n * n) } |
我们已完全呈现了Heron()和PythagoreanTriple()函数,并且PythagoreanTriple()函数使用了命名返回值,算是对函数使用的的一种补充。