gpt4 book ai didi

perl - 为什么 "use overload"不能与 "use namespace:autoclean"一起使用?

转载 作者:行者123 更新时间:2023-12-04 00:20:01 25 4
gpt4 key购买 nike

好的,只是为了健全检查重载似乎对我不起作用。我不知道是我拥有的 perl 版本,还是overload.pm 的版本,或者我实现它的方式有问题,但是这段代码对我不起作用。

perl 版本

This is perl, v5.10.1 (*) built for x86_64-linux-gnu-thread-multi

重载版本
perl -Moverload -e 'print "$overload::VERSION\n";'
1.07

token .pm
package Token;
use namespace::autoclean;
use Data::Dumper;


use Moose;
use Moose::Util::TypeConstraints;

use overload '+' => \&_overload_add, fallback => 1;

has 'secretvalue' => ( is => 'rw', isa => 'Int');

sub _overload_add{
my ( $one, $two ) = @_;
my $value = $one->secretvalue() + $two->secretvalue();
return ($value);
}

主要的
use strict;
use warnings;
use Token;
my $t = Token->new( secretvalue => 17, key => 'x' );
my $t2 = Token->new( secretvalue => 12, key => 'y' );

my $x = $t + $t2;

print $x;

打印
 $VAR1 = 12900840;

最糟糕的是,我没有在日志中收到任何警告或错误。

更新

感谢 Freido 发现问题。我已经更新了这个问题,以防其他人偶然发现这个问题。

Perl/Moose 社区一般不使用重载吗?

最佳答案

namespace::autocleanoverload 的魔力所迷惑添加处理您的运营商。以下工作如您所愿:

package Token;

use Moose;
use Moose::Util::TypeConstraints;

use overload '+' => '_overload_add';

has 'secretvalue' => ( is => 'rw', isa => 'Int');

sub _overload_add{
my ( $one, $two ) = @_;
my $value = $one->secretvalue() + $two->secretvalue();
return ($value);
}

1;

namespace::autoclean 中随意一瞥并没有发现任何东西解决这个问题的文档,所以我想这是一个意料之外的功能。一些搜索显示 bug已经被报告了。

我猜它归结为 overload 的特殊符号添加到您的包裹中。重载 +添加符号表条目 () , (+ , 和 OVERLOAD .我猜 namespace::autoclean 已经清除了其中的部分或全部内容,从而取消您的重载。

如果您喜欢冒险, here's a patchnamespace::autoclean过滤掉重载符号。

关于perl - 为什么 "use overload"不能与 "use namespace:autoclean"一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7734892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com