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.

现 在 , 从 这 开 始 。 假 设 $original 是 一 个 对 象 的 引 用 。 要 让 ++$copy 只 修 改 $copy 而不 是 $original, 先 复 制 一 份 $copy 的 拷 贝 , 然 后 把 $copy 赋 给 一 个 指 向 这 个 新 对 象 的引 用 。 直 到 ++$copy 执 行 之 后 才 执 行 这 个 动 作 , 所 以 在 自 增 之 前 $copy 和 $original是 一 致 的 —— 但 是 自 增 后 就 不 一 样 了 。 换 句 话 说 , 是 ++ 识 别 出 拷 贝 的 需 要 , 并 且 调 用 你的 拷 贝 构 造 器 。只 有 象 ++ 或 +=, 或 者 nomethod 这 样 的 修 改 器 才 能 知 晓 是 否 需 要 拷 贝 , 我 们 稍 后 描述 nomethod。 如 果 此 操 作 是 通 过 + 自 动 生 成 的 , 象 :$copy = $original;$copy = $copy +1;这 样 , 那 么 不 会 发 生 拷 贝 , 因 为 + 不 知 道 它 正 被 当 作 修 改 器 使 用 。如 果 在 某 些 修 改 器 的 运 行 中 需 要 拷 贝 构 造 器 , 但 是 没 有 给 = 声 明 句 柄 , 那 么 只 要 该 对 象 是一 个 纯 标 量 而 不 是 什 么 更 神 奇 的 东 西 , 就 可 以 自 动 生 成 = 的 句 柄 。比 如 , 下 面 的 实 际 代 码 序 列 :$copy = $original;...++$copy;可 能 最 终 会 变 成 象 下 面 这 样 的 东 西 ;$copy = $original;...$copy = $copy->clone(undef, "");$copy->incr(undef, "");这 里 假 设 $original 指 向 一 个 重 载 的 对 象 ,++ 是 用 \&incr 重 载 的 , 而 = 是 用\&clone 重 载 的 。类 似 的 行 为 也 会 在 $copy = $original++ 里 触 发 , 它 解 释 成 $copy = $original;++$original.13.5 当 缺 失 重 载 句 柄 的 时 候 (nomethod 和 fallback)342

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

Saved successfully!

Ooh no, something went wrong!