问题描述
|
我正在使用草莓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;
,因此它甚至不会编译。