Я использую Moose
(в частности, MooseX::Declare
) для создания объекта итератора, Iter
, который имеет метод next
, который продвигает состояние и возвращает 0
или 1
, как требуется для использования вwhile
заявление.Проблема, с которой я сталкиваюсь, заключается в том, что в зависимости от существования одного из параметров конструкции, next
необходимо выполнить два совершенно разных набора операций.На мой взгляд, у меня есть пять вариантов:
- если ... то в
next
метод - подкласс
- отправка хеша
- манипулирование таблицей символов
- помещать методы в разные модули и загружать требуемый один во время сборки
Number 1 просто любитель.
Номер 2 , я полагаю, является правильным ООП-способом.Я не возражаю против этого, но кажется немного излишним просто отменить один метод.
Я часто использовал Номер 3 в прошлом, когда работал процедурно или псевдо-функционально, и это то, что я делаю сейчас.
Номер 4 , как мы все знаем, чревато опасностью, и я ничего не знаю о Moose Guts, чтобы захотеть начать бездельничать, когда в этом нет необходимости.
Последний элемент, номер 5 , мне кажетсябыть самым разумным (и Perlish), но, как и номер 2, это слишком много работы.Мне действительно интересно, есть ли пятый способ, который я не рассматривал, такой как подключение к метаклассу или, возможно, достаточно разумный MooseX
модуль.