【发布时间】:2013-07-04 23:21:15
【问题描述】:
我正在阅读 Mark Summerfield 的书 Programming in Go 第 5.6.3 节中的 Closure 示例。他将 Closure 定义为“一个函数,它“捕获”存在于创建它的同一范围内的任何常量和变量,如果它引用它们的话。”
他说闭包的一种用途是匿名函数(或 Go 中的函数字面量)
他举了这样的例子:
addPng := func(name string) string { return name + ".png" }
addJpg := func(name string) string { return name + ".jpg" }
fmt.Println(addPng("filename"), addJpg("filename"))
我了解名为 addPng 的匿名函数是字符串连接运算符 + 的包装器。
如果我理解正确,他正在为匿名函数分配一个名称,然后使用该名称调用该函数。我看不出这个例子的意义。如果我定义相同的函数addPng 并在main() 中调用它,我会得到相同的结果:
package main
import ("fmt")
func addPng (name string) string {
return name + ".png"
}
func main() {
fmt.Println(addPng("filename"))
}
我了解我无法在另一个函数中定义和使用一个函数。但是为什么 Summerfield 的例子中的匿名函数叫做“Closure”呢?为什么要使用包装函数?我错过了什么?
【问题讨论】: