未设置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;
,因此它甚至不会编译。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...