perl – 为什么不’|’超负荷?

前端之家收集整理的这篇文章主要介绍了perl – 为什么不’|’超负荷?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下代码无法按预期方式工作.我错过了什么?

use strict;
use warnings;
use overload '|' => sub { 1 / ( 1 / $_[0] + 1 / $_[1] ) };

print( 5 | 5 ); # Prints '5' instead of '2.5'

解决方法

过载仅适用于有福的引用(“对象”).

package MyNumber;
use strict;
use warnings;
use overload '|' => sub { 1 / ( 1 / +$_[0] + 1 / +$_[1] ) },'0+' => sub { $_[0]->{value} },# Cast to number
            fallback => 1;                  # Allow fallback conversions

# "Constructor",bless number as MyNumber
sub num {
    my $self = { value => $_[0] };  # can be any reference
    return bless $self,"MyNumber";
}

print(num(5) | num(5));


my $a = num(5);
print ($a | 5); # This works too

猜你在找的Perl相关文章