Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-79860
кондратий
2004-02-10 17:07
2004.02.25
Delphi / DLL / MDI


1-79768
CAHbI4
2004-02-11 21:41
2004.02.25
Содержимое DLL формы на форме вызывающего приложения


1-80004
jeka_t
2004-02-13 11:38
2004.02.25
Почему метод AddStrings не пашет в классе TStrings?


1-79940
Elit
2004-02-09 16:16
2004.02.25
Плиз, помогите кто нибудь! ProgressBar


8-80023
Юрий Ёлкин
2003-10-26 22:10
2004.02.25
Как склеить два рисунка





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский