Текущий архив: 2007.05.27;
Скачать: CL | DM;
ВнизОткрытый массив для записей Найти похожие ветки
← →
Alon121 (2007-05-09 15:19) [0]Возможно ли передать открытым массивом записи во внутрь процедуры, не объявляя при этом массив при вызове?
Наверное туманно описал, приведу пример: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")]);
Возможно ли осуществить вызов таким образом?
← →
X9 © (2007-05-09 15:27) [1]А попробовать?
← →
Rial © (2007-05-09 15:29) [2]А сложно сделать
procedure MyProc(Const stArray : Array of String; Const nArray : Array of Integer):
?
← →
X9 © (2007-05-09 15:32) [3]> [2] Rial © (09.05.07 15:29)
Нужно объявить Array of string и Array of Integer как типы.
← →
Alon121 (2007-05-09 16:09) [4]Хммм... ну получается, что нельзя так сделать?
> А сложно сделать procedure MyProc(Const stArray : Array
> of String; Const nArray : Array of Integer):?
Просто сам record на самом деле побольше и если я буду так делать, я просто запутаюсь.
← →
begin...end © (2007-05-09 16:26) [5]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:32) [6]
> 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).
← →
{RASkov} © (2007-05-09 16:38) [7]> Возможно ли передать открытым массивом записи во внутрь
> процедуры, не объявляя при этом массив при вызове?
> [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;
← →
Rial © (2007-05-09 17:29) [8]> [6] Alon121 (09.05.07 16:32)
> Да, это я знаю, но хотелось сделать именно вызов без промежуточной
> переменной (RecArray).
Если ты ее не объявяешь, это не значит, что
она на самом деле не создается.
Лучше сделай все явно сам.
Страницы: 1 вся ветка
Текущий архив: 2007.05.27;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.041 c