Форум: "Начинающим";
Текущий архив: 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
Время: 2.006 c