perl – 重写对象属性 – 使用Moose的最佳方法吗?
发布时间:2020-12-16 06:16:37 所属栏目:大数据 来源:网络整理
导读:让我们看看SO问题输入机器人预测,显然是基于问题标题发布的,是否会实现: The question you’re asking appears subjective and is likely to be closed. 使用Perl / Moose,我想弥合商家文章代表的两种方式之间的不匹配.让文章有名称,数量和价格.表示的第一
让我们看看SO问题输入机器人预测,显然是基于问题标题发布的,是否会实现:
使用Perl / Moose,我想弥合商家文章代表的两种方式之间的不匹配.让文章有名称,数量和价格.表示的第一种方式是将数量设置为任何数值,包括十进制值,因此您可以使用3.5米的绳索或电缆.第二个,我必须与之接口,唉,不灵活,并且需要数量为整数.因此,我必须重写我的对象以将数量设置为1并在名称中包含实际数量. (是的,这是一个黑客,但我想保持这个例子简单.) 所以这里的故事是一个财产的价值影响其他财产的价值. 这是工作代码: #!perl package Article; use Moose; has name => is => 'rw',isa => 'Str',required => 1; has quantity => is => 'rw',isa => 'Num',required => 1; has price => is => 'rw',required => 1; around BUILDARGS => sub { my $orig = shift; my $class = shift; my %args = @_ == 1 ? %{$_[0]} : @_; my $q = $args{quantity}; if ( $q != int $q ) { $args{name} .= " ($q)"; $args{price} *= $q; $args{quantity} = 1; } return $class->$orig( %args ); }; sub itemprice { $_[0]->quantity * $_[0]->price } sub as_string { return sprintf '%2u * %-40s (%7.2f) %8.2f',map $_[0]->$_,qw/quantity name price itemprice/; } package main; use Test::More; my $table = Article->new({ name => 'Table',quantity => 1,price => 199 }); is $table->itemprice,199,$table->as_string; my $chairs = Article->new( name => 'Chair',quantity => 4,price => 45.50 ); is $chairs->itemprice,182,$chairs->as_string; my $rope = Article->new( name => 'Rope',quantity => 3.5,price => 2.80 ); is $rope->itemprice,9.80,$rope->as_string; is $rope->quantity,1,'quantity set to 1'; is $rope->name,'Rope (3.5)','name includes original quantity'; done_testing; 然而,我想知道在穆斯是否有更好的成语.但也许我的问题都是主观的,值得快速结束. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |