Clo*_*cky 3 perl autoboxing operator-overloading
我试图使用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";
Run Code Online (Sandbox Code Playgroud)
测试输出:
Autoboxing test: 4+5=10 Overloading test: 4+5=9
Run Code Online (Sandbox Code Playgroud)
Autoboxing不会4成为一个实例overload_me.它会导致方法调用与4在其左侧调用的方法overload_me.这是一个微妙的区别,但却是一个重要的区别,因为它意味着overload根本不适用.4不是一个对象,不属于任何类.它仍然只是4当你计算4 + 5它仍然只是4 + 5.
自动装箱是透明的:盒装值不会被保存到它们的(用户定义的)实现类中(除非方法选择赋予这样的祝福) - 它们只是使用它的方法,就像它们一样.
| 归档时间: |
|
| 查看次数: |
159 次 |
| 最近记录: |