"Array of const" это массив переменных, декларированных как константы. Непосредственно они представлены структурой TVarRec. Скобки просто ограничивают массив. Массив констант дает вам возможность передавать процедуре переменное количество параметров type-safe (безопасным) способом. Вот пример:
Code: |
type TVarRec = record Data: recordcase Integer of 0: (L: LongInt); 1: (B: Boolean); 2: (C: Char); 3: (E: ^Extended); 4: (S: ^string); 5: (P: Pointer); 6: (X: PChar); 7: (O: TObject); end; Tag: Byte; Stuff: array[0..2] of Byte; end;
function PtrToStr(P: Pointer): string; const HexChar: array[0..15] of Char = '0123456789ABCDEF';
function HexByte(B: Byte): string; begin Result := HexChar[B shr4] + HexChar[B and15]; end;
function HexWord(W: Word): string; begin Result := HexByte(Hi(W)) + HexByte(Lo(W)); end;
begin Result := HexWord(HiWord(LongInt(P))) + ':' + HexWord(LoWord(LongInt(P))); end;
procedure Display(X: arrayofconst); var I: Integer; begin for I := 0to High(X) do with TVarRec(X[I]), Data do begin case Tag of 0: ShowMessage('Integer: ' + IntToStr(L)); 1: if B then ShowMessage('Boolean: True') else ShowMessage('Boolean: False'); 2: ShowMessage('Char: ' + C); 3: ShowMessage('Float: ' + FloatToStr(E^)); 4: ShowMessage('String: ' + S^); 5: ShowMessage('Pointer: ' + PtrToStr(P)); 6: ShowMessage('PChar: ' + StrPas(X)); 7: ShowMessage('Object: ' + O.ClassName); end; end; end;
procedure TForm1.Button1Click(Sender: TObject); var P: array[0..5] of Char;
begin P := 'Привет'#0; Display([-12345678, True, 'A', 1.2345, 'ABC', Ptr($1234, $5678), P, Form1]); end; |
Взято с https://delphiworld.narod.ru
Массив констант (array of const) фактически является открытым массивом TVarRec (описание предекларированных типов Delphi вы можете найти в электронной справке). Приведенный ниже "псевдокод" на языке Object Pascal может послужить скелетом для дальнейшего развития:
Code: |
procedure AddStuff(const A: arrayofconst); var i: Integer; begin for i := Low(A) to High(A) do with A[i] do case VType of vtExtended: begin { добавляем натуральное число, все real-форматы автоматически приводятся к extended } end; vtInteger: begin
{ добавляем целое число, все integer-форматы автоматически приводятся к LongInt } end; vtObject: begin if VObject is DArray then with DArray(VObject) do begin { добавляем массив double-типа } end elseif VObject is IArray then with IArray(VObject) do begin { добавляем массив integer-типа } end; end; end; { Case } end; { AddStuff } |
Для получения дополнительной информации загляните в главу "open arrays" электронной справки.
Взято из Советов по Delphi от Валентина Озерова
Сборник Kuliba
- Назад
- Вперёд >>
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!