Форум: "Основная";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
ВнизПроцедуры с необязательными параметрами Найти похожие ветки
← →
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 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.051 c