Объект-итератор
имеется, например, журнал ошибок. Нужно написать объект-итератор, с помощью которого можно было бы последовательно просмотривать сообщения (от первого к последнему). При этом нельзя терять возвращаемые сообщения. Какой бы вы предложили интерфейс? Язык программирования - не имеет значения
почему нельзя терять сообщения: для некоторых сообщений используется krumo, который при первом вызове, кроме результата выводит css+js |
Цитата:
|
пока что не знаю, как среда может повлиять. Предложи несколько вариантов
т.е. вопрос в интерфейсе итератора с указанными ограничениями. Что конкретно он будет итерировать не так важно |
Цитата:
|
искренне не понимаю ваш вопрос
[telepatemode] в STL вам подошел бы любой контейнер последовательности, со свзанным с ним последовательным итератором [/telepatemode] [telepatemode=2] в WEB-е, вам бы подошла база ВСЕХ сообщений, и хранение последнего просмотренного сообщения в сессии. при это вы всегда можете вернутся к началу(как сессии, так и вообще всех сообщений), и начать вновь последовательный(по uid сообщений) просмотр их [/telepatemode] |
вопрос был об интерфейсе класса
php way: class Itertator { function valid(){ ... } // проверяет, есть ли еще элементы function current(){ ... } // возвращает текущий элемент function next(){ ... } // переходим к следующему и возвращаем его } используем, например, так: for( $i=new Iterator(); $i->valid(); $i->next() ) ... $i->current() ... но так теряются возвращаемые значения ($i->next() возвращает следующий). Поэтому я бы сделал, чтобы он возвращал текущий и переходил к следующему. А current сделал бы через next, т.е. созраняем состояние, получаем с помощью next текущий, и восстанавливаем состояние (позицию), чтобы не дублировать код java way: class Iterator { function hasNext(){ ... } // проверяем, есть ли еще элементы function next(){ ... } // переходим к следующему и возвращаем его } использование: while( i.hasNext() ) ... i.next() ... по сравнению с php-вариантом, не теряются значения и не надо реализовывать current через next как бы сделали вы? Или прочие другие мысли... |
что вам мешает организовать ваш JAVA-style, в PHP?
вы знакомы с итераторами в STL? они спокойно позволяют работать способами схожими с обоими вашими способами. думаю вам это поможет Код:
vector<int> arr; |
Цитата:
Цитата:
C++-вариант... Опять же по сути отличие в том, что итератор здесь - внешняя сущность, указатель. В остальном, это php-вариант. И это отличие никак не влияет на озвученные мной проблемы: потеря элементов "массива" и дублирование логики в current/next подробнее о проблемах: 1) выводим журнал, но для некоторых сообщений используем внешнюю библиотеку, которая при первом использовании вместе с результатом возвращает немного css+js. Т.е. сообщения "на лету" преобразуются и надо не потерять первое преобразованное с помощью библиотеки сообщение 2) одно сообщение на страничке не равно одному сообщению в журнале и тем более одной строке в журнале (текстовый файл), т.е. переход к следующему сообщению это не i++, поэтому я бы предпочел реализовать переход к следующему и получение текущего значения в одном методе p.s. наверное, плохо объяснил проблему... или это ни разу не проблема... :-? p.p.s. после того как четко объяснил проблему, стало понятно, что java-вариант в данном случае лучше подходит. Хм, где-то читал, что пытаясь объяснить кому-то проблему, сам лучше ее понимаешь |
p.p.p.s. если вынести вывод информации из итератора, первая проблема исчезает
|
Часовой пояс GMT +3, время: 22:19. |