Главная страница
    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.003 c
15-1370939812
брат Птибурдукова
2013-06-11 12:36
2013.12.01
Подскажите инструмент


15-1371025777
alexdn
2013-06-12 12:29
2013.12.01
Интерны


2-1361099341
alexdn
2013-02-17 15:09
2013.12.01
Веб браузер на форме


2-1360865736
Вова
2013-02-14 22:15
2013.12.01
исходник функции Mouse_Event хочу


15-1371056583
ПЛОВ
2013-06-12 21:03
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский