加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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问题输入机器人预测,显然是基于问题标题发布的,是否会实现:

The question you’re asking appears subjective and is likely to be closed.

使用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;

然而,我想知道在穆斯是否有更好的成语.但也许我的问题都是主观的,值得快速结束.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读