Маленькое предложение по расширению TCollection

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Climber
постоялец
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Маленькое предложение по расширению TCollection

Сообщение Climber »

Давайте туда что-нибудь типа такого добавим:

Код: Выделить всё

interface 
type
  TIteratorProc: procedure(CollectionItem: TCollectionItem) of object;

  TCollection
  ...
  public
    procedure Iterator(IteratorProc: TIteratorProc);
  end;

implementation

procedure TCollection.Iterator(IteratorProc: TIteratorProc);
var i: integer;
begin
  for i:=0 to Count-1 do
    IteratorProc(Items[i]);
end;

Короче, такой способ разом произвести определенное действие над всеми элементами коллекции.
Себе-то я уже сделал, вот теперь хотел с остальными поделиться...
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Сообщение hinst »

статья описывает то, чего в стабильном релизе нет. сейчас прогнал поиск строки "IEnumerable" по source от fpc 2.4.0, поисковик показывает, что нет там такой :roll:
алсо делал так

Код: Выделить всё

for c in s do Write(c);
, компилятор 2.4.0 ругается
Последний раз редактировалось hinst 21.05.2010 17:51:48, всего редактировалось 1 раз.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

hinst
Так возьми fpc из svn

Добавлено спустя 1 минуту 17 секунд:
hinst писал(а):статья имхо лажа.

Не нравится отредактируй! Это перевод с буржуйского...
alexrayne
постоялец
Сообщения: 125
Зарегистрирован: 03.12.2008 15:56:26

Сообщение alexrayne »

Старый турбовижн етот метоб называл ForEach.
а по поводу
Mr.Smart писал(а):http://wiki.freepascal.org/for-in_loop/ru

это можно делать и в пределах стандартов паскаля, а не прибегать к исхищрениям компилятора.
имхо что итератор что цикл - оба дадут одинаковый результат, вопрос что можно сделать оптимизированее.
мне кажется оба варианта имеют право на жизнь.
sign
энтузиаст
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Сообщение sign »

Есть ещё один удобный механизм:

Код: Выделить всё

var T: TCollection;
    P: TCollectionItem;
begin
...
  for P in T1 do  MyProc(P);   
...
end;
Ответить