未设置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\', is => \'ro\', 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的小猫
按任意键继续 。 。 。
未设置默认值。
谢谢。
没有找到相关结果
已邀请:
2 个回复
扭湘阀柿蹄
方法,该方法取代了
提供的
方法。删除该杂散
方法,即可正常工作。
古擅坛犯
和
都很好。 问题是您的对象由于某种原因尚未初始化。即,$ self-> birth_year()返回未定义。 如果您查看输出结果,“有一只名为2011年吃的小猫”,您会丢失名字,所吃的东西,并且年龄为2011-0(如果我还记得减法表的话,则是2011年) 。由于undef被视为0,因此在担心年龄计算之前,您需要解决一些问题。 另外,我运行了您的代码,您或者没有告诉我们某些信息,或者这是您的实际代码的解释。当我运行它时,得到了预期的结果:“我有一只名叫Beauty的小猫在1997年14岁时吃鱼” 我认为这是因为您没有在
中包含尾随的
,因此它甚至不会编译。