The question you’re asking appears subjective and is likely to be closed.
使用Perl / Moose,我想弥合商家文章代表的两种方式之间的不匹配.让文章有名称,数量和价格.表示的第一种方式是将数量设置为任何数值,包括十进制值,因此您可以使用3.5米的绳索或电缆.第二个,我必须与之接口,唉,不灵活,并且需要数量为整数.因此,我必须重写我的对象以将数量设置为1并在名称中包含实际数量. (是的,这是一个黑客,但我想保持这个例子简单.)
所以这里的故事是一个财产的价值影响其他财产的价值.
这是工作代码:
#!perlpackage 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;
然而,我想知道在穆斯是否有更好的成语.但也许我的问题都是主观的,值得快速结束. 总结
以上是内存溢出为你收集整理的perl – 重写对象属性 – 使用Moose的最佳方法吗?全部内容,希望文章能够帮你解决perl – 重写对象属性 – 使用Moose的最佳方法吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)