06-02-2003 16:44
Кодируя итератор, сделай, чтобы его bool Next(...) возвращал false не на последнем элементе, а за ним.
Иначе кто-нибудь забудет обработать последний элемент:
MyElement element;
MyEnum* enum = new MyEnum(...);
while (enum->Next(&element))
{
  // process element
}
Комментарии:
11-02-2003 17:22
Камрад
Именно поэтому не рекомендуется делать функции, которые совершают какие-то действия, кроме возврата значения:

from
   i:=my_collection.get_new_iterator
   -- Или, если уже есть, i.start
until
   i.is_off
loop
   do_something(i.item)
   i.next
end


В таком варианте подобная ошибка невозможна.
11-02-2003 19:05
Камрад с блокнотиком
А вот так красивее…
Perl:
foreach $element (@collection) {
  statement;
}
PHP:
foreach ($collection as $element) {
  statement;
}
C#:
foreach (ElementType element in collection) {
  statement;
}

отредактировано: 11-02-2003 19:06 - Centaur

11-02-2003 19:54
Камрад
А вот так еще лучше (все тот же Eiffel):
my_collection.do_all(agent do_something(?))

отредактировано: 11-02-2003 19:55 - Anafay

Закрыть