Турбо Паскаль 6.0




Итератор ForEach.


ForEach берет указатель на процедуру. Эта процедура имеет 1 параметр - указатель на элемент, хранящийся в коллекции. ForEach вызывает эту процедуру 1 раз для каждого элемента коллекции в порядке, в котором элементы появляются в коллекции. Процедура PrintAll в TVGUID17 приводит пример итератора ForEach.

procedure PrintAll(C: PCollection);

procedure PrintClient(P : PClient); far; begin with P^ do Writeln(Account^, '':20-Length(Account^), Name^, '':20-Length(Name^), Phone^, ''20-Length(Phone^)); end;

begin Writeln; Writeln; C^.ForEach(@PrintClient); { вызывает PrintClient для каждого элемента из С} end;

Для каждого элемента коллекции, передаваемого как параметр в PrintAll, вызывается вложенная процедура PrintClient. PrintClient просто печатает информацию объекта о клиенте в форматированном виде. Вам необходимо осторожно выбирать процедуры, которые Вы вызываете с итераторами. В этом примере PrintClient должна быть процедурой - она не может быть методом объекта - и она должна быть локальной (вложенной в тот же блок) в программе, которая вызывает ее. Она так же должна быть объявлена как дальняя процедура либо с помощью директивы far, либо с помощью директивы компилятора $F+. Наконец, процедура должна использовать один параметр - указатель на элемент коллекции.




Содержание  Назад  Вперед