У меня есть класс Американского лося с a lazy_build
атрибут. Значение того атрибута является функцией другого (неленивого) атрибута.
Предположим, что кто-то инстанцирует класса со значением 42 для необходимого атрибута. Затем они запрашивают ленивый атрибут, который вычисляется как функция 42. Затем у них имеется нахальство изменять первый атрибут!
Ленивый был уже создан, таким образом, разработчика не позвонят снова, и ленивый атрибут является теперь устаревшим.
У меня есть решение теперь, где я поддерживаю "грязный" флаг на необходимом атрибуте, и средство доступа на ленивом проверяет грязный флаг и восстанавливает его в случае необходимости.
Однако это походит на большую работу. Существует ли способ обработать это в Американском лосе, например, чертах использования?
Мое типичное решение:
has 'attr1' => (
...
trigger => \&clear_attr2,
);
т.е. когда attr1 обновляется, attr2 очищается и будет перестроен при следующем доступе. clear_attr2
предоставляется бесплатно, если вы используете lazy_build
. Пока вы используете методы доступа, вам не нужен «грязный» флаг.
Это распространенный шаблон - было бы неплохо использовать какую-нибудь черту для обработки «производных» атрибутов.