首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl自动装箱和操作符重载似乎不起作用?

Perl自动装箱和操作符重载似乎不起作用?
EN

Stack Overflow用户
提问于 2011-02-28 09:15:28
回答 1查看 163关注 0票数 3

我试图同时使用Perl的自动装箱功能和运算符重载功能,但它们似乎不能协同工作。

有没有可能我错过了如何正确使用重载的一些细微差别,或者这是某种奇怪的异常行为?

示例代码:

代码语言:javascript
复制
#!/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";

测试输出:

代码语言:javascript
复制
Autoboxing test: 4+5=10 Overloading test: 4+5=9
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-28 09:23:42

自动装箱不会使4成为overload_me的实例。它使左侧带有4的方法调用在overload_me中调用方法。这是一个细微的区别,但也是一个重要的区别,因为这意味着overload根本不适用。4不是一个对象,也不属于任何类。它仍然只是4,当你计算4 + 5时,它仍然是4 + 5

来自the autobox docs

自动装箱是透明的:已装箱的值不会被添加到它们的(用户定义的)实现类中(除非该方法选择给予这样的支持)-它们只是简单地使用它的方法,就像它们一样。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5137327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档