perl – 如何重载Moose构造函数?
发布时间:2020-12-15 21:49:18 所属栏目:大数据 来源:网络整理
导读:对不起 Java术语,但我如何重载Moose构造函数? 假设我代表一个细分市场.我可以采取起点和点,或起点和长度,或终点和长度. 我怎样才能允许这种替代施工方法? 解决方法 您不需要覆盖新的. You can supply your own BUILD : #!/usr/bin/perlpackage My::Segmen
对不起
Java术语,但我如何重载Moose构造函数?
假设我代表一个细分市场.我可以采取起点和点,或起点和长度,或终点和长度. 我怎样才能允许这种替代施工方法? 解决方法
您不需要覆盖新的.
You can supply your own
BUILD :
#!/usr/bin/perl package My::Segment; use Moose; use namespace::autoclean; use Carp qw( confess ); has 'start' => (is => 'ro',isa => 'Num',predicate => 'has_start',writer => '_set_start',); has 'end' => (is => 'ro',predicate => 'has_end',writer => '_set_end',); has 'length' => (is => 'ro',predicate => 'has_length',writer => '_set_length',); sub BUILD { my $self = shift; $self->has_start and $self->has_end and $self->length and do { return if $self->length == $self->end - $self->start; confess "Inconsistent start,end and length"; }; $self->has_start and $self->has_end and do { $self->_set_length($self->end - $self->start); return; }; $self->has_start and $self->has_length and do { $self->_set_end($self->start + $self->length); return; }; $self->has_end and $self->has_length and do { $self->_set_start($self->end - $self->length); return; }; confess "At least two of start,end or length must be supplied"; } __PACKAGE__->meta->make_immutable; package main; use YAML; my $x = My::Segment->new(start => 0,length => 3); my $y = My::Segment->new(start => 1,end => 4); my $z = My::Segment->new(end => 5,length => 3); print Dump($_) for $x,$y,$z; my $w = My::Segment->new(start => 0,end => 0,length => 1); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |