Восстановление лениво созданного атрибута, когда базовый атрибут изменяется у Американского лося

У меня есть класс Американского лося с a lazy_build атрибут. Значение того атрибута является функцией другого (неленивого) атрибута.

Предположим, что кто-то инстанцирует класса со значением 42 для необходимого атрибута. Затем они запрашивают ленивый атрибут, который вычисляется как функция 42. Затем у них имеется нахальство изменять первый атрибут!

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

У меня есть решение теперь, где я поддерживаю "грязный" флаг на необходимом атрибуте, и средство доступа на ленивом проверяет грязный флаг и восстанавливает его в случае необходимости.

Однако это походит на большую работу. Существует ли способ обработать это в Американском лосе, например, чертах использования?

5
задан friedo 25 April 2010 в 10:00
поделиться

1 ответ

Мое типичное решение:

has 'attr1' => (
    ...
    trigger => \&clear_attr2, 
);

т.е. когда attr1 обновляется, attr2 очищается и будет перестроен при следующем доступе. clear_attr2 предоставляется бесплатно, если вы используете lazy_build . Пока вы используете методы доступа, вам не нужен «грязный» флаг.

Это распространенный шаблон - было бы неплохо использовать какую-нибудь черту для обработки «производных» атрибутов.

9
ответ дан 14 December 2019 в 01:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: