Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Зачем нужен был в List.Assign параметр ListA


Автор: Delphist 22.10.2008, 17:15
Скажите, пожалуйста, зачем нужен был параметр ListB, в методе TList.Assign
Объясняю на примере, если я делаю вот так:
Код

procedure TForm1.Button2Click(Sender: TObject);
var
  l, la, lb: TList;
begin

  l := TList.Create;

  la := TList.Create;
  la.Add(tform1.Create(self));
  la.Add(tform1.Create(self));

  lb := TList.Create;
  lb.Add(tform1.Create(self));

  l.Assign(la, laCopy, lb);
end;


то это то же самое, что:
Код

procedure TForm1.Button2Click(Sender: TObject);
var
  l, lb: TList;
begin

  l := TList.Create;

  lb := TList.Create;
  lb.Add(tform1.Create(self));

  l.Assign(lb);
end;


Помоему ребята из Borland'а в этот день были не много обкурены smile 

Автор: Christoph 22.10.2008, 17:45

Заменяет список la на lb, и операция между ними копирование.

Код

TList.Assign(ListA: TList; Operation: TListAssignOp = laCopy;             
             ListB: TList = nil);


Второй  и третий параметр по умолчанию, если не передать, будут laCopy, nil

Автор: MetalFan 22.10.2008, 17:49
Цитата(Delphist @  22.10.2008,  17:15 Найти цитируемый пост)
Помоему ребята из Borland'а в этот день были не много обкурены smile 

может стоит читать документацию?
Цитата
Call Assign to assign the elements of another list to this one. Assign combines the source list with this one using the logical operator specified by the AOperator parameter.
 
If the ListB parameter is specified (Delphi) or not NULL (C++), then Assign first replaces all the elements of this list with those in ListA, and then merges ListB into this list using the operator specified by AOperator.
 
If the ListB parameter is not specified (Delphi) or NULL (C++), then Assign merges ListA into this list using the operator specified by AOperator.

да, в твоем примере так и будет, но это частный непоказательный случай

Автор: Delphist 22.10.2008, 18:10
Цитата(Christoph @  22.10.2008,  18:45 Найти цитируемый пост)
Заменяет список la на lb, и операция между ними копирование.

Ни фига он не заменяет

Добавлено @ 18:10
Цитата(MetalFan @  22.10.2008,  18:49 Найти цитируемый пост)
может стоит читать документацию?

Так прочитал, а оказалось, что написано одно, а выполняется совсем другое, поэтому и обратился на форум.

P.S. Можешь сам проверить.

Автор: Christoph 22.10.2008, 19:46
Как не заменяет? Вот что я читал...

Код

exists in Delphi that allows you to assign to a TList object the
> result of the operation
> 'ListA   AOperator  ListB'. This can be : copy, and, xor for example.

Автор: Delphist 22.10.2008, 20:28
Цитата(Christoph @  22.10.2008,  20:46 Найти цитируемый пост)
Как не заменяет? Вот что я читал...

Не веришь, проверь сам

Автор: MetalFan 22.10.2008, 22:00
Цитата(Delphist @  22.10.2008,  18:10 Найти цитируемый пост)
а оказалось, что написано одно, а выполняется совсем другое

чтото я не понял, что "другое"... все работает так, как написано в документации

Автор: Delphist 22.10.2008, 22:27
Цитата(MetalFan @  22.10.2008,  23:00 Найти цитируемый пост)
чтото я не понял, что "другое"... все работает так, как написано в документации 

Ну как что, вот Christoph  утверждает, что список la будет заменен на lb

Автор: Christoph 22.10.2008, 22:42
Нет...
'ListA   AOperator  ListB' и результат помещается в TList object ;) разве не так?

Автор: Delphist 22.10.2008, 23:16
Цитата(Christoph @  22.10.2008,  23:42 Найти цитируемый пост)
Нет...
'ListA   AOperator  ListB' и результат помещается в TList object ;) разве не так? 

попробуй сам убедишься или глянь исходник

Автор: Christoph 22.10.2008, 23:22
Будет время попробую обязательно smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)