go是函数式编程语言吗?
[2012-05-19 翻译自这里, 对原文有所扩展, 也有所删减. 版权属于原作者, 转载必须保留此声明.]
func SayHello() { fmt.Println("Hello") }
func SayHelloToSomeone(name string) {
fmt.Println("Hello " + name + ".")
}
func GetGreeting (name string) string {
greeting := "Hello " + name + "."
return greeting
}
// test
greeting := GetGreeting("Bob")
fmt.Println(greeting) //outputs "Hello Bob."
func GetGreeting (name string) (greeting string) {
greeting = "Hello " + name + "."
return
}
type Stack struct {
pos int
data [10]int
}
func (s *Stack) Pop() (value int, ok bool) {
if s.pos > 0 {
s.pos--
ok = true
value = s.data[s.pos]
return
}
ok = false
return
}
type TormentList struct { patients []string } // 将[]string(string数组)包装成TormentList类型的指针 func NewTormentList(people []string) *TormentList { return &TormentList{people} }
func (g *TormentList) Map(f func(string)) {
// 遍历g.patients, 为其每个value调用f方法
for _, val := range(g.patients) {
f(val)
}
}
patients := []string{"Anand", "David", "Ivan", "JoJo", "Jin", "Mon", "Peter", "Sachin"} gl := NewTormentList(patients) // 还记得上面定义的SayHelloToSomeone函数吧? gl.Map(SayHelloToSomeone) /* outputs the following: Hello Anand. Hello David. Hello Ivan. Hello JoJo. Hello Jin. Hello Mon. Hello Peter. Hello Sachin. */
func Screen(patients []string) func(string) bool {
// 定义匿名函数并返回
return func(name string) bool {
for _, soul := range patients {
if soul == name {
return true
}
}
return false
}
}
// 吃过寿司的人的清单 those_who_bought_sushi := []string{"Anand", "JoJo", "Jin", "Mon", "Peter", "Sachin"} // 得到刷选器函数 bought_sushi := Screen(those_who_bought_sushi) // 调用刷选器函数就可以知道某人是否在清单上 fmt.Println(bought_sushi("Anand")) // true fmt.Println(bought_sushi("Alex")) // false
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。