我试图同时使用Perl的自动装箱功能和运算符重载功能,但它们似乎不能协同工作。
有没有可能我错过了如何正确使用重载的一些细微差别,或者这是某种奇怪的异常行为?
示例代码:
#!/usr/bin/perl
use strict;
use warnings;
package overload_me;
use overload('+' => "overloaded_add");
sub overloaded_add{
my ($me, $him) = @_;
$me+$him+1;
}
use autobox NUMBER => 'overload_me';
my $autoboxing_test = 4->overloaded_add(5);
my $overloading_test = 4 + 5;
print "Autoboxing test: 4+5=$autoboxing_test
Overloading test: 4+5=$overloading_test\n";测试输出:
Autoboxing test: 4+5=10 Overloading test: 4+5=9发布于 2011-02-28 09:23:42
自动装箱不会使4成为overload_me的实例。它使左侧带有4的方法调用在overload_me中调用方法。这是一个细微的区别,但也是一个重要的区别,因为这意味着overload根本不适用。4不是一个对象,也不属于任何类。它仍然只是4,当你计算4 + 5时,它仍然是4 + 5。
来自the autobox docs:
自动装箱是透明的:已装箱的值不会被添加到它们的(用户定义的)实现类中(除非该方法选择给予这样的支持)-它们只是简单地使用它的方法,就像它们一样。
https://stackoverflow.com/questions/5137327
复制相似问题