Вход


Главная страница >> Учебный процесс >> Конспекты >> Delphi. Библиотека визуальных компонентов VCL >> Структура справочника и соглашения >> Новые возможности языка. Значения, возвращаемые функциями. >> Новые возможности языка. Передача параметрами открытых массивов
Переход на главную страницу

Сервер поддерживается
кафедрой информатики и вычислительной техники ГрГУ
тел. +375-(0)152-445-101
E-mail :
kadan@grsu.grodno.by


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

  


Новые возможности языка. Передача параметрами открытых массивов


Упрощены правила передачи в процедуру параметров типа открытый массив. Теперь, для того чтобы передать в процедуру такой массив, не обязательно описывать и инициализировать его. Например:

function Mean(data: array of Real):Real;
var i : Integer;
begin
══Result := 0;
══for i:=Low(data) to High(data) do Result := Result + data[i];
══Result := Result/(High(data)-Low(data));
end;
begin
══x := Mean([1,2,3,4]);
end.

Особенно полезным это свойство оказывается при передаче массива параметров в функцию Format и аналогичные ей. Более того, появилась возможность передавать в процедуру массив разнотипных переменных (именно такой передается в функцию Format). Такой параметр должен быть описан как array of const и может передаваться как по ссыпке, так и по значению. Внутри процедуры элементы массива рассматриваются как записи типа TVarRec, который описан в модуле SYSTEM. В этой записи имеется поле Type, позволяющее идентифицировать тип фактического параметра.

В следующем примере приведена процедура ? аналог Format, использующая массив разнотипных параметров:

function MyFormat(const Params: array of const): string;
const BString: array[Boolean] of string = ('False', 'True');
var i: Integer; S: string;
begin
══Result := '' ;
══for I := Low(Params) to High(Params) do
════with TVarRec(Params[i]) do
══════begin
════════case VType of
══════════vtlnteger ═: s := IntToStr(VInteger);
══════════vtBoolean══: s := BString[VBoolean];
══════════vtChar═════: s := Vchar;
══════════vtExtended═: s := FloatToStr(VExtended^);
══════════vtString═══: s := vString^;
══════════vtPointer══: s := IntToHex(Longint(VPointer),8);
══════════vtPChar════: s := StrPas(VPChar);
══════════vtObject═══: s := vObject.ClassName;
══════════vtClass════: s := vClass.ClassName;
════════end;
══════AppendStr(Result,s);
════end;
end;

При ее вызове с параметрами:

MyFormat( [3, '>', 2, ' is ', 3>2]);

будет получена строка '3>2 is True'.



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

  


Для комментария : kadan@grsu.grodno.by

  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017