未设置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的小猫   按任意键继续 。 。 。 未设置默认值。 谢谢。     
已邀请:
        今天您的另一个问题是在向showed2ѭ展示完整信息后,您将看到什么问题。您定义了一个杂散的
new
方法,该方法取代了
Moose
提供的
new
方法。删除该杂散
new
方法,即可正常工作。     
        
$year
(localtime)[5]
都很好。 问题是您的对象由于某种原因尚未初始化。即,$ self-> birth_year()返回未定义。 如果您查看输出结果,“有一只名为2011年吃的小猫”,您会丢失名字,所吃的东西,并且年龄为2011-0(如果我还记得减法表的话,则是2011年) 。由于undef被视为0,因此在担心年龄计算之前,您需要解决一些问题。 另外,我运行了您的代码,您或者没有告诉我们某些信息,或者这是您的实际代码的解释。当我运行它时,得到了预期的结果:“我有一只名叫Beauty的小猫在1997年14岁时吃鱼” 我认为这是因为您没有在
Cat.pm
中包含尾随的
1;
,因此它甚至不会编译。     

要回复问题请先登录注册