Skip to Main Content
Go程序设计语言
book

Go程序设计语言

by 艾伦A. A.多诺万, 布莱恩W. 柯尼汉
August 2021
Beginner to intermediate content levelBeginner to intermediate
450 pages
6h 1m
Chinese
Pearson
Content preview from Go程序设计语言

5.6 匿名函数

命名函数只能在包级别的作用域进行声明,但我们能够使用函数字面量在任何表达式内指定函数变量。函数字面量就像函数声明,但在func关键字后面没有函数的名称。它是一个表达式,它的值称作匿名函数。

函数字面量在我们需要使用的时候才定义。就像下面这个例子,之前的函数调用strings.Map可以写成:

更重要的是,以这种方式定义的函数能够获取到整个词法环境,因此里层的函数可以使用外层函数中的变量,如下面这个示例所示:

函数squares返回了另一个函数,类型是func()int。调用squares创建了一个局部变量x而且返回了一个匿名函数,每次调用squares都会递增x的值然后返回x的平方。第二次调用squares函数将创建第二个变量x,然后返回一个递增x值的新匿名函数。

这个求平方的示例演示了函数变量不仅是一段代码还可以拥有状态。里层的匿名函数能够获取和更新外层squares函数的局部变量。这些隐藏的变量引用就是我们把函数归类为引用类型而且函数变量无法进行比较的原因。函数变量类似于使用闭包方法实现的变量,Go程序员通常把函数变量称为闭包。 ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

C++语言导学(原书第2版)

C++语言导学(原书第2版)

本贾尼 斯特劳斯特鲁普
Go语言编程

Go语言编程

威廉·肯尼迪

Publisher Resources

ISBN: 9787111558422