不能在角色中设置类的属性

时间:2010-08-19 00:45:05

标签: perl class attributes moose role

首先,我不确定需要包含多少信息,因为我很难找到问题的根源。

我有一个Moose角色,其子程序(以及其他一些东西)试图为这样的类设置属性:

$genre = Movie::Genre->new({
    genreName => 'Drama',
    genreID => '1'
                 });

问题是,它没有。紧接着$genre转储,表明它仍然是空的:

$genre: bless( {}, 'Movie::Genre' )

奇怪的是,当我在我的测试文件中执行THE EXACT SAME LINE时,它会按预期的方式运行此转储:

$genre: bless( {
             genreID => '1',
             genreName => 'Drama'
           }, 'Movie::Genre' )

我很难找到使这两行代码不同的原因,导致一行工作而另一行失败。

有关哪些条件会导致第一个示例失败并允许第二个示例成功的任何想法?如果有必要,我很乐意提供更多背景信息。谢谢!

1 个答案:

答案 0 :(得分:2)

该行只是将这些参数传递给Movie :: Genre构造函数。由构造函数决定如何处理它们。

听起来这个调用(在角色中)是在Movie :: Genre类获取名为genreNamegenreID的属性之前执行的。默认情况下,Moose构造函数会忽略它们无法识别的任何参数,因此不会生成警告。

在将属性添加到Movie :: Genre后,您的测试文件必须进行该调用。

我们必须看到更多的代码才能弄清楚为什么会发生这种情况。