闭包(closures)是除使用全局变量外,在函数调用间保证数据持续性的简易、有效 且安全的的方法。如果你需要在具名函数间共享变量,你可以仅为这些函数的声明引入 一个新作用域(scope):
对安全性开关函数进行封装让这三个函数可以共享状态而不必将词法变量直接地暴露给外 部代码。在外部代码可以更改内部状态时,这个惯用语可以很好的起到作用,但在状态仅 由单个函数维护时,它就显得有些笨拙了。
假设你想统计一下你的冰淇淋小摊接待了多少客人。逢百的客人可以免费加料:
这个方法 行得通,但是为单个函数创建新的词法作用域没有那么得必要,它带来了意外的 复杂度。state
关键字允许你声明一个词法作用域变量,它的值在调用之间是连续的:
你必须通过使用类似 Modern::Perl
的模块、feature
编译命令、或是要求 Perl 的版本必须新于 5.10(例如,use 5.010;
或 use 5.012;
)来明确地启用这个特 性。
你也可以在匿名函数内使用 state
,就像这个计数器的典型例子一样:
……虽然没有什么明显的优势让人采用这种方式。
Hey! The above document had some coding errors, which are explained below:
- Around line 5:
-
A non-empty Z<>