Невозможно установить атрибуты класса в роли - PullRequest
0 голосов
/ 19 августа 2010

Во-первых, я не совсем уверен, сколько информации необходимо включить, потому что мне очень трудно отследить причину этой проблемы.

У меня есть роль Moose с подпрограммой, которая (наряду с несколькими другими вещами) пытается установить атрибуты для класса следующим образом:

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

Проблема в том, что это не так. Дамп $genre сразу после, указывает, что он все еще пуст:

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

Еще страннее, когда я выполняю ТОЧНУЮ ЖЕ ЛИНИЮ в моем тестовом файле, он работает, как и ожидалось, с этим дампом:

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

Я изо всех сил пытаюсь найти то, что отличает эти две строки кода, заставляя одну работать, а другую - отказывать.

Есть какие-нибудь идеи относительно того, какие условия приведут к тому, что первый пример потерпит неудачу и позволит второму добиться успеха? Я был бы рад предоставить больше контекста, если это необходимо. Спасибо!

1 Ответ

2 голосов
/ 19 августа 2010

Эта строка просто передает эти параметры конструктору Movie :: Genre. Этот конструктор должен решить, что с ними делать.

Похоже, что вызов (в роли) выполняется до того, как класс Movie :: Genre получил атрибуты с именами genreName и genreID. По умолчанию конструкторы Moose игнорируют любые параметры, которые они не распознают, поэтому предупреждение не генерируется.

Ваш тестовый файл должен выполнять этот вызов после добавления атрибутов в Movie :: Genre.

Нам нужно увидеть больше кода, чтобы точно понять, почему это происходит.

...