0

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

我有一个带有子程序的 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' )

我正在努力寻找使这两行代码不同的原因,导致一行工作而另一行失败。

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

4

1 回答 1

2

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

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

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

我们必须查看更多代码才能弄清楚发生这种情况的确切原因。

于 2010-08-19T00:53:06.337 回答