第5章,部分字词修订。

This commit is contained in:
zhliner
2017-08-24 22:27:42 +08:00
parent 9c0723ff6a
commit ff3c5b0a70
11 changed files with 27 additions and 30 deletions

View File

@@ -1,6 +1,6 @@
## 5.6. 匿名函数
拥有函数名的函数只能在包级语法块中被声明通过函数字面量function literal我们可绕过这一限制在任何表达式中表示一个函数值。函数字面量的语法和函数声明相似区别在于func关键字后没有函数名。函数值字面量是一种表达式它的值被为匿名函数anonymous function
拥有函数名的函数只能在包级语法块中被声明通过函数字面量function literal我们可绕过这一限制在任何表达式中表示一个函数值。函数字面量的语法和函数声明相似区别在于func关键字后没有函数名。函数值字面量是一种表达式它的值被为匿名函数anonymous function
函数字面量允许我们在使用函数时再定义它。通过这种技巧我们可以改写之前对strings.Map的调用
@@ -30,7 +30,7 @@ func main() {
}
```
函数squares返回另一个类型为 func() int 的函数。对squares的一次调用会生成一个局部变量x并返回一个匿名函数。每次调用匿名函数时该函数都会先使x的值加1再返回x的平方。第二次调用squares时会生成第二个x变量并返回一个新的匿名函数。新匿名函数操作的是第二个x变量。
函数squares返回另一个类型为 func() int 的函数。对squares的一次调用会生成一个局部变量x并返回一个匿名函数。每次调用匿名函数时该函数都会先使x的值加1再返回x的平方。第二次调用squares时会生成第二个x变量并返回一个新的匿名函数。新匿名函数操作的是第二个x变量。
squares的例子证明函数值不仅仅是一串代码还记录了状态。在squares中定义的匿名内部函数可以访问和更新squares中的局部变量这意味着匿名函数和squares中存在变量引用。这就是函数值属于引用类型和函数值不可比较的原因。Go使用闭包closures技术实现函数值Go程序员也把函数值叫做闭包。