13.07.2015 Views

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

my $newfunc = sub {my $target = shift;print "$salute, $target!\n";};return $newfunc;# 返 回 一 个 闭 合}$f = make_saying("Howdy"); # 创 建 一 个 闭 合$g = make_saying("Greetings"); # 创 建 另 外 一 个 闭 合# 到 时 ...$f->("world");$g->("earthings");它 打 印 出 :Howdy, world!Greetings earthlings!特 别 要 注 意 $salute 是 如 何 继 续 指 向 实 际 传 递 到 make_saying 里 的 数 值 的 , 尽 管 到 该匿 名 子 过 程 运 行 的 时 候 my $salute 已 经 超 出 了 范 围 。 这 就 是 用 闭 合 来 干 的 事 情 。 因 为 $f和 $g 保 存 着 指 向 函 数 的 引 用 , 当 调 用 它 们 的 时 候 , 这 些 函 数 仍 然 需 要 访 问 独 立 的 $salute版 本 , 因 此 那 些 变 量 版 本 自 动 附 着 在 四 周 。 如 果 你 现 在 覆 盖 $f, 那 么 它 的 版 本 的 $salute将 自 动 消 失 。(<strong>Perl</strong> 只 是 在 你 不 再 查 看 的 时 候 才 做 清 理 。)<strong>Perl</strong> 并 不 给 对 象 方 法 ( 在 第 十 二 章 描 述 ) 提 供 引 用 , 但 是 你 可 以 使 用 闭 合 获 取 类 似 的 效 果 。假 设 你 需 要 这 么 一 个 引 用 : 它 不 仅 仅 指 向 他 代 表 的 方 法 的 子 过 程 , 而 且 它 在 调 用 的 时 候 , 还会 在 特 定 的 对 象 上 调 用 该 方 法 。 你 可 以 很 方 便 地 把 对 象 和 方 法 都 看 成 封 装 在 闭 合 中 的 词 法 变量 :228

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!