Вниз
Скачать: CL | DM;

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

← →
TransparentGhost   (2004-02-11 16:16) [0]

Как писать Процедуры с необязательными параметрами, типа как BlockRead и BlockWrite?


← →
Oyster ©   (2004-02-11 16:19) [1]

Не знаю, как это делать по-человечески, но можно попробовать overload.


← →
Sandman25 ©   (2004-02-11 16:20) [2]

ИМХО, никак.
Но можно, например, так:
MyBlockRead(var F: File; var Buf; Count: Integer ; PAmtTransferred: PInteger = nil);
...
if Assigned(PAmtTransferred) then
PAmtTransferrer^ := ...


← →
Плохиш   (2004-02-11 16:20) [3]

procedure MyProc(p1: Integer=0; P2: String=""; P3: Boolean=true...);

Чё в хелпе ничего найти не можете?


← →
VLAD-MAL   (2004-02-11 16:21) [4]

Ну, для последних параметров можно определить Default - значения, или что-то вроде Unassigned для параметров типа Variant.
Или вариантный массив:
Format("Список %s %s %s, ",[е1,у2,е3])

А вообще такие вещи в Паскале в общем виде не разрешены.


← →
Плохиш   (2004-02-11 16:27) [5]


> А вообще такие вещи в Паскале в общем виде не разрешены.

Да.

Процедуре write(ln), read(ln), blockread, blockwrite обрабатываются на этапе компиляции.


← →
Внук ©   (2004-02-11 16:32) [6]

Процедуры с необязательными параметрами, тем более с заранее неизвестным числом параметров (Format), пишутся на ассемблере, AFAIK


← →
VLAD-MAL   (2004-02-11 16:33) [7]

Процедуры с необязательными параметрами, тем более с заранее неизвестным числом параметров (Format), пишутся на ассемблере, AFAIK
Как? И чтобы в Delphi вставить?


← →
Amoeba ©   (2004-02-11 16:38) [8]

Default параметров в D3 еще нет, появились только в D4.


← →
Внук ©   (2004-02-11 16:38) [9]

>>VLAD-MAL (11.02.04 16:33) [7]
Сам не писал, скажу прямо. Посмотри, например, FormatBuf из sysutils.pas


← →
Плохиш   (2004-02-11 16:40) [10]

>Внук © (11.02.04 16:38) [9]

У FormatBuf известно количество параметров.


← →
Внук ©   (2004-02-11 16:41) [11]

Да, сразу уточню, под словами "необязательные параметры" я имею в виду не параметры со значениями по умолчанию, а именно переменное количество параметров.


← →
VLAD-MAL   (2004-02-11 16:42) [12]

function FormatBuf(var Buffer; BufLen: Cardinal; const Format;
FmtLen: Cardinal; const Args: array of const): Cardinal; overload; - тут выполняется разбор того, что ему передали из Format. И ничего тут особенного нет. А вот как такие штуки, типа своих Read/Write в программу запихать? По-моему - нельзя. Это фича компилятора.


← →
Внук ©   (2004-02-11 16:42) [13]

>>Плохиш (11.02.04 16:40) [10]
>>У FormatBuf известно количество параметров.
Формально да :) И это как раз один из способов добиться того, чего хочет автор (насколько я его понял, конечно)


← →
Плохиш   (2004-02-11 16:43) [14]

>Внук © (11.02.04 16:41) [11]

> Да, сразу уточню, под словами "необязательные параметры"
> я имею в виду не параметры со значениями по умолчанию, а
> именно переменное количество параметров.

Pascal этого не допускает.


← →
Плохиш   (2004-02-11 16:45) [15]

Кстати нет никакой связи между Внук © (11.02.04 16:32) [6] и Внук © (11.02.04 16:42) [13]


← →
Внук ©   (2004-02-11 16:46) [16]

>>VLAD-MAL (11.02.04 16:42) [12]
>>И ничего тут особенного нет
Можно и так считать. Хотя передача параметра без типа const Format; и array of const - это все-таки нечто особенное, на мой взгляд.
Насчет write - не знаю. Да и не нужно это реально


← →
VLAD-MAL   (2004-02-11 16:46) [17]

Да, сразу уточню, под словами "необязательные параметры" я имею в виду не параметры со значениями по умолчанию, а именно переменное количество параметров.
Ну, сделай несколько вариантов метода. Ну, несколько громоздко.

Зато Дельфи быстрее всех компилируется!


← →
TransparentGhost   (2004-02-11 16:49) [18]

Ну раз нельзя, мне сойдёт вариант и с параметрами в которые буду передавать 0 или "", а внутри уже разберу.
Спасибо всем.


← →
Внук ©   (2004-02-11 16:51) [19]

>>Плохиш (11.02.04 16:43) [14]
Паскаль это допускает. Хотя бы через тот же array of const. Можно, конечно, считать это одним параметром. Это кому как нравится.
Конечно, в С++ это несколько изящнее. Но не об этом речь.


← →
jack128 ©   (2004-02-11 16:59) [20]


> Можно, конечно, считать это одним параметром
Именно, как один параметр. Ибо это массив array of TVarRec.


← →
Внук ©   (2004-02-11 17:03) [21]

Это уже условности. Вообще-то открытый массив лишь формально можно считать одним параметром (это мое личное представление), а уж массив вариантов тем более. Он и сделан специально для таких случаев


← →
jack128 ©   (2004-02-11 17:13) [22]


> Вообще-то открытый массив лишь формально можно считать одним
> параметром
Да. На самом деле - это два параметра ;-)



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.02 c
1-79720
Серёга
2004-02-11 15:11
2004.02.25
Подключение dll


14-80290
Miwa
2004-02-03 11:30
2004.02.25
F4 не работает...


4-80349
LOMic
2003-12-18 10:32
2004.02.25
Здравствуйте. Как получить HWND для SpeedButton ?


14-80100
Layner
2004-02-05 14:52
2004.02.25
Выводил ли кто нибудь WMZ (WebMoney) в наличку?


14-80223
DAnton
2004-02-06 09:20
2004.02.25
ПОМОГИТЕ!!!!!




   Наверх