【问题标题】:Perl Moose default value not setPerl Moose 默认值未设置
【发布时间】:2011-06-22 03:12:02
【问题描述】:

我正在使用草莓 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 年有一只名叫吃的小猫 按任意键继续 。 . .

未设置默认值。

谢谢。

【问题讨论】:

    标签: perl moose


    【解决方案1】:

    Your other question today 在您向Cat.pm 显示完整源代码后显示问题所在。您定义了一个杂散的new 方法,它覆盖了Moose 提供的new 方法。删除那个流浪的new 方法,它就可以正常工作了。

    【讨论】:

    【解决方案2】:

    $year 很好,(localtime)[5] 也很好。

    问题是您的对象由于某种原因尚未初始化。也就是说,$self->birth_year() 会返回 undefined。

    如果您查看您的输出,“有一只小猫,在 2011 年吃东西”,您会错过名字,它吃什么,并且年龄是 2011 - 0(如果我记得我的减法表,或者只是 2011 年) .由于 undef 被视为 0,因此在担心年龄计算之前,您需要处理一些问题。

    另外,我运行了你的代码,你要么没有告诉我们什么,要么这是对你实际代码的解释。当我运行它时,我得到了预期的结果:“我有一只名叫 Beauty 的小猫在 1997 年 14 岁时吃鱼”

    我认为这是因为您没有在 Cat.pm 中包含结尾的 1;,因此它甚至无法编译。

    【讨论】:

      猜你喜欢
      • 2014-03-13
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      • 2017-07-17
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多