![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Открытый массив для записей [D7]
Alon121 © (2007-05-09 15:19:00)Возможно ли передать открытым массивом записи во внутрь процедуры, не объявляя при этом массив при вызове?
Наверное туманно описал, приведу пример:
type
TRec = record
r: Integer;
d: string;
end;
procedure _smap(const rc: array of TRec);
begin
for i := Low(rc) to High(rc) do ShowMessage(rc[i].d) ;
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
_smap([(1, 'test-1'), (2, 'test-2'), (3, 'test-3')]);
Возможно ли осуществить вызов таким образом?
Rial (2007-05-09 17:29:00) [1]> [6] Alon121 (09.05.07 16:32)
> Да, это я знаю, но хотелось сделать именно вызов без промежуточной
> переменной (RecArray).
Если ты ее не объявяешь, это не значит, что
она на самом деле не создается.
Лучше сделай все явно сам.
{RASkov} (2007-05-09 16:38:00) [2]> Возможно ли передать открытым массивом записи во внутрь
> процедуры, не объявляя при этом массив при вызове?
> [6] Alon121 (09.05.07 16:32)
Нет, не получится... объявлять придется, либо см[5], или:
type
TRec = record
r: Integer;
d: string;
end;
TArrRec: array of TRec;
procedure _smap(const rc: TArrRec);
begin
for i := Low(rc) to High(rc) do ShowMessage(rc[i].d);
end;
procedure TMainForm.FormCreate(Sender: TObject);
var ArR: TArrRec;
begin
SetLength(ArR, 3);
ArR[0].r:=...
.....
_smap(ArR);
end;
Но может и это устроит:
procedure _smap(rc: array of const);
var i: Integer;
begin
for i := Low(rc) to High(rc) do
case rc[i].VType of
vtAnsiString, vtString, vtChar: ShowMessage(rc[i].VPChar);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
_smap([1, 'test-1', 2, 'test-2', 3, 'test-3']);
end;
Alon121 (2007-05-09 16:32:00) [3]
> const RecArray: array [1..3] of TRec = ((r: 1; d: 'test-
> 1'), (r: 2; d: 'test-2'), (r: 3; d: 'test-3'));begin ..
> . _smap(RecArray); ...end
Да, это я знаю, но хотелось сделать именно вызов без промежуточной переменной (RecArray).
begin...end (2007-05-09 16:26:00) [4]const
RecArray: array [1..3] of TRec =
((r: 1; d: 'test-1'), (r: 2; d: 'test-2'), (r: 3; d: 'test-3'));
begin
...
_smap(RecArray);
...
end
Alon121 (2007-05-09 16:09:00) [5]Хммм... ну получается, что нельзя так сделать?
> А сложно сделать procedure MyProc(Const stArray : Array
> of String; Const nArray : Array of Integer):?
Просто сам record на самом деле побольше и если я буду так делать, я просто запутаюсь.
X9 (2007-05-09 15:32:00) [6]> [2] Rial © (09.05.07 15:29)
Нужно объявить Array of string и Array of Integer как типы.
Rial (2007-05-09 15:29:00) [7]А сложно сделать
procedure MyProc(Const stArray : Array of String; Const nArray : Array of Integer):
?
X9 (2007-05-09 15:27:00) [8]А попробовать?