Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.26;
Скачать: CL | DM;

Вниз

Процедура или функция в var-е   Найти похожие ветки 

 
Дмитрий_177   (2006-01-10 17:35) [0]

Я видел в исходниках некоторых компонентов что прям в разделе описания переменных(var) процедуры, пишут еще какуюнибудь процедуру... я как понимаю что эта процедура или функция хранится в пямяти пока работает процедура которая ее содержит, и используется она только в этой процедуре, а потом уничтожается, при завершении процедуры ее содержащей... на сколько эффективен этот способ или всетаки лучше процедуры все как обычно делать? А еще подскажите пожалуйста как правильно объявлять такие процедуры в var-е, а то я уже не помню где я это видел...(((


 
Johnmen ©   (2006-01-10 17:39) [1]

Видимо ты имеешь в виду процедурный тип.
Все подробности и нюансы есть в хелпе, F1.


 
Leonid Troyanovsky ©   (2006-01-10 17:39) [2]


> Дмитрий_177   (10.01.06 17:35)  


 Object Pascal Language Guide: Local declarations

--
Regards, LVT.


 
EvS   (2006-01-10 18:03) [3]

procedure Procedure1;
var a,b,...;
procedure Procedure2(c,d);
begin
....
end;
begin
....
Procedure2(a,b);

....
end;


 
Дмитрий_177   (2006-01-10 18:16) [4]

Спасибо! :)


 
VirEx ©   (2006-01-10 18:19) [5]

type
 TSomeProc=procedure(a,b:string);
 TSomeFunc=function(c:integer):boolean;
...
function pro1; external "foo.dll";
function fun1; external "foo.dll" name "fun";
...
var
pro2:TSomeProc;
fun2:TSomeFunc;
pro3:procedure(a,b:string);
fun3:function(c:integer):boolean;
pro4:Pointer;
fun4:Pointer;
...
h:=loadLibrary("foo.dll");
pro:=GetProcAddress(h,"pro");
fun:=GetProcAddress(h,"fun");
pro1:=GetProcAddress(h,"pro");
fun2:=GetProcAddress(h,"fun");
pro4:=Pointer(pro);
fun4:=@fun;
...
pro("text1","text2");
b:=fun(5);
..
FreeLibrary(h);


 
VirEx ©   (2006-01-10 18:21) [6]


>  [5] VirEx ©   (10.01.06 18:19)

блин, разбежался :)
pro1 ведь уже объявлена


 
Дмитрий_177   (2006-02-05 01:04) [7]

Что-то у меня не работает так...

procedure TForm1.Button1Click(Sender: TObject);
var
procedure summa(a, b: integer);
 begin
 ListBox1.Items.Add(IntToStr(a) + " + " + IntToStr(b) + " = " + IntToStr(a + b));
 end;
begin
summa(1, 2);
summa(2, 3);
summa(3, 4);
end;


 
Дмитрий_177   (2006-02-05 01:10) [8]

подставил в var перед процедурой "summa" просто так две переменные:
c,d: integer;
и заработало... что-то я не пойму почему так...


 
Плохиш ©   (2006-02-05 02:30) [9]


> Дмитрий_177   (05.02.06 01:10) [8]

var - это объявление переменных,
а в твоём случае процедура - не переменная, а вложенная.

PS. Я так понимаю, изучать программирование по книжкам сейчас совсем не модно.


 
palva ©   (2006-02-05 14:21) [10]

Неверная формулировка вопроса. Процедура находится не в разделе переменных а рассматривается как отдельный раздел. То есть если вы завершив процедуру хотите описать еще несколько переменных, то вам снова надо написать слово var. А var непосредственно перед процедурой рассматривается как ошибка, получается что это как бы пустой раздел переменных.


 
Дмитрий_177   (2006-02-05 14:56) [11]

Спасибо, вот так заработало ))) А еще такой вопрос, вообще рекомендуется ли такое использование процедуры в процедуре или лучше ее отдельно написать?

procedure TForm1.Button1Click(Sender: TObject);
procedure summa(a, b: integer);
 begin
 ListBox1.Items.Add(IntToStr(a) + " + " + IntToStr(b) + " = " + IntToStr(a + b));
 end;
begin
summa(1, 2);
summa(2, 3);
summa(3, 4);
end;


 
Desdechado ©   (2006-02-05 15:33) [12]

такие inline-процедуры имеют смысл только тогда, когда код в ней является обобщением кода  только вызывающей функции и не имеет смысла вне ее



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

Текущий архив: 2006.02.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.03 c
15-1139155208
VictorT
2006-02-05 19:00
2006.02.26
Редирект без сохранения в истории переходов броузера (PHP)


2-1139569824
BaBayka007
2006-02-10 14:10
2006.02.26
Подскажите пожалуйста неопытному....


15-1139292051
Ega23
2006-02-07 09:00
2006.02.26
С Днём рождения! 7 февраля


15-1139204881
Ega23
2006-02-06 08:48
2006.02.26
С Днём рождения! 5 февраля


15-1138971737
xayam2006
2006-02-03 16:02
2006.02.26
Delphi и система элек.платежей WebMoney