编程学习biancheng.45soft.com 本站提供了各种在线教程和资料,供大家学习与参考.
编程学习
当前位置: 主页 > Perl > 重载 >

Perl 重载


对象非常酷,但有时候它有点太酷了。有时候你会希望它表现得少象一点对象而更象普通的数据类型一点。但是实现这个却有问题:对象是用引用代表的引用,而引用除了当引用以外没什么别的用途。你不能在引用上做加法,也不能打印它们,甚至也不能给它们使用许多 Perl 的内建操作符。你能做的唯一一件事就是对它们解引用。因此你会发现自己在写许多明确的方法调用,象:

print  $object->as_string;
$new_object = $subject->add($object);

象这样的明确的解引用通常都是好事;你决不能把你的引用和指示物混淆,除非你想混淆它们。下面可能就是你想混淆的情况之一。如果你把你的类设计成使用重载,你可以装做看不到引用而只是说:

print $object;
$new_object = $subject + $object;

当你重载某个 Perl 的内建操作符的时候,你实际上定义了把它应用于某特定类型的对象时的特性。有很多Perl的模块利用了重载,比如 Math::BigInt,它让你可以创建 Math::BigInt 对象,这些对象的性质和普通整数一样,但是没有尺寸限制。你可以用 + 把它们相加,用 / 把它们相除,用 <=> 比较它们,以及用 print 打印它们。


请注意重载和自动装载(autoload)是不一样的,自动装载是根据需要装载一个缺失的函数或方法。重载和覆盖(overriding)也是不一样的,覆盖是一个函数或方法覆盖了另外一个。重载什么东西也不隐藏;它给一个操作添加了新含义,否则在区区引用上进行该操作就是无聊的举动。

Perl
Perl 重载