Go語言的function(函式)可作為變數及另一個函式的引數(arguments)傳遞。
下面的hello()
函式接收一個字串參數並在前加上"Hello"印出;
hi()
函式也是接收一個字串參數但在前加上"Hi"印出;
greeting()
函式接收兩個參數,第一個為函式func(string)
,第二個為字串。
package main
import "fmt"
func hello(name string) {
fmt.Println("Hello " + name + "!")
}
func hi(name string) {
fmt.Println("Hi " + name + "!")
}
func greeting(f func(string), s string) {
f(s)
fmt.Println("How are you?")
}
func main() {
greeting(hello, "John")
}
hello()
及hi()
的型態與greeting()
的第一個參數定義相同,因此都可以作為引數傳入。
在main()
呼叫greeting()
,第一個參數以hello
傳入,第二個參數輸入"John"印出以下。
Hello John!
How are you?
若第一個參數改以hi
傳入則印出以下。
func main() {
greeting(hi, "John")
}
Hi John!
How are you?
當函式傳入另一個函式為參數時稱為Callback Function;
而接收函示為參數的函式又稱為Higher Order Function。
所以hello()
及hi()
是callback function;greeting()
是higher order function。
沒有留言:
張貼留言