如何解决未设置Perl Moose的默认值
| 我正在使用草莓perl 驼鹿2.0010 在课堂里:package Cat;
use 5.010;
use strict;
use Moose;
has \'name\',is => \'ro\',isa => \'Str\',default => \'Beauty\';
#has \'age\',is => \'ro\';
has \'diet\',is => \'rw\',default => \'fish\';
has \'birth_year\',isa=> \'Int\',default => 1997;
sub age
{
my $self = shift;
my $year = (localtime)[5] + 1900;
return $year - $self->birth_year();
}
在应用程序中:
use 5.010;
use strict;
use Cat;
my $kitty = Cat->new();
say \'I have a kitten named \',$kitty->name(),\' eats \',$kitty->diet(),\'in age \',$kitty->age();
输出:
在中使用未初始化的值
在Cat.pm第16行减去(-)。
在2011年有只名为eats的小猫
按任意键继续 。 。 。
未设置默认值。
谢谢。
解决方法
今天您的另一个问题是在向showed2ѭ展示完整信息后,您将看到什么问题。您定义了一个杂散的
new
方法,该方法取代了Moose
提供的new
方法。删除该杂散new
方法,即可正常工作。
, $year
和(localtime)[5]
都很好。
问题是您的对象由于某种原因尚未初始化。即,$ self-> birth_year()返回未定义。
如果您查看输出结果,“有一只名为2011年吃的小猫”,您会丢失名字,所吃的东西,并且年龄为2011-0(如果我还记得减法表的话,则是2011年) 。由于undef被视为0,因此在担心年龄计算之前,您需要解决一些问题。
另外,我运行了您的代码,您或者没有告诉我们某些信息,或者这是您的实际代码的解释。当我运行它时,得到了预期的结果:“我有一只名叫Beauty的小猫在1997年14岁时吃鱼”
我认为这是因为您没有在Cat.pm
中包含尾随的1;
,因此它甚至不会编译。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。