![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Есть массивы константы:
WaitModem:array[0..1]of string=('Нет','Есть'); SyncTx:=array[0..2]of string=('Отсутствует','Внутренняя','Внешняя'); И т.п. Как передать в подпрограмму такой массив, если у них различная длина? Подпрограмма должна делать примерно следующее: возвращает строку по нужному индексу: Result:=NameArray[n]; //например - Внутренняя Решение с открытыми массивами работает, но овчинка выделки не стоит. Надо каждый раз задавать длину массива, инициализировать и т.п. В итоге, куча "лишнего" текста... По длине получается, выгоднее иметь кучу специализированных подпрограмм. |
|
#2
|
||||
|
||||
|
Цитата:
Код:
const
WaitModem:array[0..1]of string=('Нет','Есть');
function Func(A: array of String; Index: Integer): String;
begin
Result:=A[Index];
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Func(WaitModem, 1));
end; |
| Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Stal12 (07.09.2012)
| ||
|
#3
|
||||
|
||||
|
Одно НО - пригодилась бы проверка на выход за границы массива. Иначе пользователь обязательно добьется использования Func(WaitModem, 2). Когда все массивы разной длины, такое вполне может произойти.
|
|
#4
|
||||
|
||||
|
Цитата:
:Код:
function Func(A: array of String; Index: Integer): String;
begin
if (Index >= Low(A)) and (Index <= High(A)) then
begin
Result := A[Index];
end else
begin
raise Exception.Create('Выход за пределы диапазона');
end;
end; |