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.

方 法 和 普 通 子 过 程 之 间 的 一 个 区 别 是 , 它 们 的 包 在 什 么 时 候 被 解 析 —— 也 就 是 说 ,<strong>Perl</strong> 什么 时 候 决 定 应 该 执 行 该 方 法 或 者 子 过 程 的 哪 些 代 码 。 子 过 程 的 包 是 在 你 的 程 序 开 始 运 行 之前 , 在 编 译 的 时 候 解 析 的 。( 注 : 更 准 确 地 说 , 子 过 程 调 用 解 析 成 一 个 特 定 的 类 型 团 , 它 是一 个 填 充 到 编 译 好 的 操 作 码 树 上 的 引 用 。 这 个 类 型 团 的 含 义 甚 至 在 运 行 时 也 是 可 以 协 商 的—— 这 就 是 为 什 么 AUTOLOAD 可 以 为 你 自 动 装 载 一 个 子 过 程 。 不 过 , 类 型 团 的 含 义 通 常在 编 译 的 时 候 也 被 解 析 —— 由 一 个 命 名 恰 当 的 子 过 程 定 义 解 析 。) 相 比 之 下 , 一 个 方 法 包 直到 实 际 调 用 的 时 候 才 解 析 。( 编 译 的 时 候 检 查 原 型 , 这 也 是 为 什 么 编 译 时 可 以 使 用 普 通 子 过程 而 却 不 能 使 用 方 法 的 原 因 。)方 法 包 不 能 早 些 解 析 的 原 因 是 相 当 简 单 的 : 包 是 由 调 用 的 类 决 定 的 , 而 在 方 法 实 际 被 调 用 之前 , 调 用 者 是 谁 并 不 清 楚 。OO 的 核 心 是 下 面 这 样 简 单 的 逻 辑 : 一 旦 得 知 调 用 者 , 则 可 以知 道 调 用 者 的 类 , 而 一 旦 知 道 了 类 , 就 知 道 了 类 的 继 承 关 系 , 一 旦 知 道 了 类 的 继 承 关 系 , 那么 就 知 道 实 际 调 用 的 子 过 程 了 。抽 象 的 逻 辑 是 要 花 代 价 的 。 因 为 方 法 比 较 迟 才 解 析 , 所 以 <strong>Perl</strong> 里 面 向 对 象 的 解 决 方 法 要 比相 应 的 非 OO 解 决 方 法 慢 。 而 对 我 们 稍 后 要 介 绍 的 几 种 更 加 神 奇 的 技 巧 而 言 , 它 可 能 慢 很多 。 不 过 , 解 决 许 多 常 见 的 问 题 的 原 因 并 不 是 做 得 快 , 而 是 做 得 聪 明 。 那 就 是 OO 的 闪 光点 。12.3.1 使 用 箭 头 操 作 符 的 方 法 调 用我 们 说 过 有 两 种 风 格 的 方 法 调 用 。 第 一 种 调 用 方 法 的 风 格 看 起 来 象 下 面 这 样 :INVOCANT->METHOD(LIST)INVOCANT->METHOD这 种 方 法 通 常 被 称 做 箭 头 调 用 ( 原 因 显 而 易 见 )。( 请 不 要 把 -> 和 => 混 淆 ,“ 双 管 ” 箭 头 起神 奇 逗 号 的 作 用 。) 如 果 有 任 何 参 数 , 那 么 就 需 要 使 用 圆 括 弧 , 而 当 INVOCANT 是 一 个包 的 名 字 的 时 候 , 我 们 把 那 个 被 调 用 的 METHOD 看 作 类 方 法 。 实 际 上 两 者 之 间 并 没 有 区别 , 只 不 过 和 类 的 对 象 相 比 , 包 名 字 与 类 本 身 有 着 更 明 显 的 关 联 。 还 有 一 条 你 必 须 记 住 : 就是 对 象 同 样 也 知 道 它 们 的 类 。 我 们 会 告 诉 你 一 些 如 何 把 对 象 和 类 名 字 关 联 起 来 的 信 息 , 但 是你 可 以 在 不 知 道 这 些 信 息 的 情 况 下 使 用 对 象 。比 如 , 使 用 类 方 法 summon 的 构 造 一 个 类 , 然 后 在 生 成 的 对 象 上 调 用 实 例 方 法 speak,你 可 以 这 么 说 :$mage = Wizard->summon("Gandalf");# 类 方 法$mage->speak("friend");# 实 例 方 法288

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

Saved successfully!

Ooh no, something went wrong!