Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];

Вниз

Процедура или функция в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.044 c
1-1138116612
pasha_golub
2006-01-24 18:30
2006.02.26
Рисование растра в метафайл


2-1139686084
-Андрей-
2006-02-11 22:28
2006.02.26
Таблица в Access


3-1136374272
tytus
2006-01-04 14:31
2006.02.26
Ссылочная целосность в таблицах InterBase


6-1132408666
Nikos
2005-11-19 16:57
2006.02.26
Ссылка на форме


15-1138005763
cyborg
2006-01-23 11:42
2006.02.26
Только что в локальном чате :)





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