大佬教程收集整理的这篇文章主要介绍了perl – 为什么“use overload”与“use namespace:autoclean”一起使用?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
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社区一般不会使用超载吗?
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;
偶然的一瞥在命名空间中没有显示任何东西:: autoclean docs解决这个问题,所以我想这是一个意想不到的功能.有些搜索显示有一个bug已被报道.
我想这是减少重载添加到你的包的特殊符号.重载会添加符号表条目(),(和OVERLOAD.我猜想这些条目中的一些或全部都是由namespace :: autoclean进行抽真空的,因此可以撤销你的重载.
如果你觉得冒险,here’s a patch为namespace :: autoclean过滤掉过载符号.
以上是大佬教程为你收集整理的perl – 为什么“use overload”与“use namespace:autoclean”一起使用?全部内容,希望文章能够帮你解决perl – 为什么“use overload”与“use namespace:autoclean”一起使用?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。