После phaylon's answer to "How can I flexibly add data to Moose objects?", предположим, что у меня есть следующий Муз атрибут:Как изменить атрибут атрибута Moose?
has custom_fields => (
traits => [qw(Hash)],
isa => 'HashRef',
builder => '_build_custom_fields',
handles => {
custom_field => 'accessor',
has_custom_field => 'exists',
custom_fields => 'keys',
has_custom_fields => 'count',
delete_custom_field => 'delete',
},
);
sub _build_custom_fields { {} }
Теперь предположим, что я хотел бы каркать, если пытаться читать (но не писать) в несуществующий настраиваемого поля. Мне предложили phaylon обернуть custom_field
с помощью модификатора. Я экспериментировал с модификаторами around
, следуя различным примерам в документах Moose, но не мог понять, как изменить дескриптор (а не только метод объекта).
В качестве альтернативы, существует ли еще один способ реализовать этот ключ прокручивания, если -пробовать-читать-не-существующий?
@David B, 'handles' создает стандартные методы объекта. Объект не может иметь два метода с тем же именем. Как он узнает, с кем вы звонили? (Perl 5 не имеет многоточия.) – cjm
+1 Спасибо, cjm. Я пытался изменить свой комментарий, на который вы ответили, но случайно удалил его. Только для записи я спрашивал что-то вроде «что происходит, если два атрибута имеют дескриптор с тем же именем». По-видимому, это невозможно. Еще раз спасибо! –
@ David только для пояснения, опция 'handles' предназначена для чтения как глагол 'handles', а не существительные 'handles'. Как и в «этом атрибуте * обрабатывает * эти методы», а не «этот атрибут имеет эти ручки». Это инструмент для делегаций. – hobbs