Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.12.01;
Скачать: [xml.tar.bz2];

Вниз

Необязательный var-параметр в процедуре   Найти похожие ветки 

 
Михаил   (2013-02-19 17:31) [0]

Как создать процедуру с необязательным var параметром?
Аналогом является BlockRead
procedure 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.002 c
15-1370338471
Els
2013-06-04 13:34
2013.12.01
Какой лучше антивирус выбрать


15-1370617769
Hadroran
2013-06-07 19:09
2013.12.01
Построение запроса


1-1318903108
Acid_Burn
2011-10-18 05:58
2013.12.01
Связать memo с текстом между тегами(html)


15-1371206675
Empleado
2013-06-14 14:44
2013.12.01
nostalgie


15-1370928230
MBo
2013-06-11 09:23
2013.12.01
Я всегда знал ;)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский