Date::Simple
个对象会显示此行为,其中$date++
会返回第二天的日期。
Date ::简单对象是不可变的。将$ date1分配给$ date2后,$ date1的更改不会影响$ date2。这意味着,例如,没有像set_year操作, $ date ++将新对象分配给$ date 。
如何自定义对象的前/后增量行为,以便++$object
或$object--
执行特定操作?
我已经浏览了perlboot,perltoot,perltooc和perlbot,但我没有看到任何示例说明如何做到这一点。
答案 0 :(得分:12)
你想要overload
。
package Number;
use overload
'0+' => \&as_number,
'++' => \&incr,
;
sub new {
my ($class, $num) = @_;
return bless \$num => $class;
}
sub as_number {
my ($self) = @_;
return $$self;
}
sub incr {
my ($self) = @_;
$_[0] = Number->new($self->as_number + 1); # note the modification of $_[0]
return;
}
package main;
my $num = Number->new(5);
print $num . "\n"; # 5
print $num++ . "\n"; # 5
print ++$num . "\n"; # 7
答案 1 :(得分:7)