Форум: "Начинающим";
Текущий архив: 2013.12.01;
Скачать: [xml.tar.bz2];
ВнизНеобязательный var-параметр в процедуре Найти похожие ветки
← →
Михаил (2013-02-19 17:31) [0]Как создать процедуру с необязательным var параметром?
Аналогом является BlockReadprocedure BlockRead(var F: File; var Buf; Count: Integer [;var Result: Integer]);
Т.е. Result можно указывать при вызове, можно не указывать. Мне тоже самое нужно. Как описать такую процедуру?
Нужно именно var-параметр. Как объявить необязательный параметр для передачи по значению я знаю.
← →
Ega23 © (2013-02-19 17:45) [1]сделай функцию.
← →
Плохиш © (2013-02-19 17:45) [2]Самый быстрый способ - посмотреть реализацию в исходниках.
PS. Даю 90%, что это compiler magic.
← →
Ega23 © (2013-02-19 17:47) [3]
function BlockRead(var F: File; var Buf; Count: Integer): Integer;
var
i: Integer;
begin
BlockRead(F, Buf, Count);
if SomeCondition then
i := BlockRead(F, Buf, Count);
end;
А var-параметр "по-умолчанию" нельзя сделать по-определению.
← →
Михаил (2013-02-19 17:50) [4]Смотрел реализацию. Там вообще что то все непонятно.
function _BlockRead(var f: TFileRec; buffer: Pointer; recCnt: Longint; var recsRead: Longint): Longint;
......
function _BlockRead(var f: TFileRec; buffer: Pointer; recCnt: Longint; var recsRead: Longint): Longint;
begin
Result := BlockIO(f, buffer, recCnt, recsRead, fmInput,
{$IFDEF MSWINDOWS} ReadFileX, {$ENDIF}
{$IFDEF POSIX} __read, {$ENDIF}
100);
end;
Здесь параметры называются совсем по другому, нежели при вызове. И нигде не видно что четвертый параметр необязательный
← →
Михаил (2013-02-19 17:51) [5]
> Ega23 © (19.02.13 17:47) [3]
А как сделали в BlockRead параметр Result необязательным?
← →
Вячеслав (2013-02-19 17:53) [6]procedure test(a : integer; var n : integer); overload;
begin
...
end;
procedure test(a : integer); overload;
var
n : integer;
begin
test(0, n);
end;
P.S. а функцию не проще использовать и игнорировать результат?
← →
Михаил (2013-02-19 17:57) [7]
> Вячеслав (19.02.13 17:53) [6]
Функцию можно, просто у меня там вообще 2 необязательных var-параметра нужно. Думал что это просто сделать, раз в BlockRead, Reset, Rewrite ... есть такие. Ну раз это нереально или сверхгеморно, лучше сделаю перегрузку (overload)
← →
Михаил (2013-02-19 17:58) [8]Всем спасибо!!!
← →
Dimka Maslov © (2013-02-19 18:05) [9]procedure Proc(Res: PInteger = nil);
begin
if Assigned(Res) then Res^ := 100500;
end;
BlockRead, Reset, Rewrite - это compiler magic, на них требования синтаксиса не распостраняются.
← →
Германн © (2013-02-20 01:05) [10]
> Dimka Maslov © (19.02.13 18:05) [9]
+
Всё что относится к модулю System - Compiler Magic.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.12.01;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c