A Tour of GoのFunction valuesを読んでいて、色々勘違いしていてわからなくなってしまったので、手を動かしてわかるようになるまでのメモ書きです。
要旨
勘違いしていたのはA Tour of Goの以下の記載についてです。
関数も変数です。他の変数のように関数を渡すことができます。
どうしても関数を変数に渡した際に「戻り値を渡している」と考えていまい、例題が理解できませんでした。
理解に至った考え方は 「関数そのものを変数に渡している」 です。
例: A Tour of GoのFunction values
ここでは関数compute
が定義されています。
func compute(fn func(float64, float64) float64) float64 { return fn(3, 4) }
これは
引数: (float64, float64)
を引数に、float64
を返す関数
戻り値: float64
となる関数です。
つまり関数そのものを引数として、変数のように渡すことができます。
A Tour of Goでは「(float64, float64)
を引数に、float64
を返す関数」であるhypot
を定義するとともに、同じ関数型の関数math.Pow
を引数としてcompute
に渡してあげる例となっています。
fmt.Println(compute(hypot)) fmt.Println(compute(math.Pow))