Текущий архив: 2004.05.30;
Скачать: CL | DM;
Внизtry Найти похожие ветки
← →
Empleado © (2004-05-18 17:23) [0]Всем привет!
Кто-нибудь объясните мне разницу в результате выполнения данных двух процедур. А именно, почему так происходит?
Вариант 1) С использованием raise
Вариант 2) С использованием div 0
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
i := 0;
try
//i := 1 div i
raise Exception.Create("My exception")
except
showmessage("in block TRY..EXCEPT")
end;
showmessage("Showmessage - after TRY..EXCEPT")
end;
procedure TForm1.Button2Click(Sender: TObject);
var i: integer;
begin
i := 0;
try
//i := 1 div i
raise Exception.Create("My exception")
finally
showmessage("in block TRY..FINALLY")
end;
showmessage("Showmessage - after TRY..FINALLY")
end;
Gracias
← →
Digitman © (2004-05-18 17:31) [1]
> почему так происходит?
а что. собссно, происходит-то ? ... что-то жуткое ?
← →
Palladin © (2004-05-18 17:32) [2]ну и типа справка по finally и except тебе ни о чем не сказала?
← →
zhe (2004-05-18 17:32) [3]ни в одном из случаев последний showmessage не должен появляться, чё ту не понятно.
зы: сделайте что-то с вашым тупорылым серваком! ERROR 500!
← →
zhe (2004-05-18 17:36) [4]то, что после finally выполнится полюбому, а то что после except, только тогда, когда после верхнего try скурвится какой-нибудь ексепшын. вот и вся ...
← →
begin...end © (2004-05-18 17:43) [5]Последний ShowMessage выполнится в любом из этих двух случаев, поскольку он вообще расположен за пределами блоков try...except...end и try...finally...end.
← →
zhe (2004-05-18 17:52) [6]не гони, во втором он хрен выполнится, только в первом случае, я хреново посмортел. потому, как во втором ексэпшын сразу выбивает процедуру(функцию) на фик
← →
Empleado © (2004-05-18 18:13) [7]>Palladin © (18.05.04 17:32) [2]
Сказала, сказала... Уже битых полчаса всматриваюсь в хелп, как идиот, чес.слово; и ни фига!
Собственно вопрос от загнанности и настрадалости.
Ты даже не представляешь, сколько раз я читал эту фразу (finally): If an exception is raised during execution of statementList1, control is transferred to statementList2; once statementList2 finishes executing, the exception is re-raised...
Теперь предлагаю такой вариант:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
i := 0;
try
i := 1 div i
//raise Exception.Create("My exception")
except
showmessage("in block TRY..EXCEPT")
end;
showmessage("Showmessage - after TRY..EXCEPT");
showmessage("i = " + inttostr(i))
end;
procedure TForm1.Button2Click(Sender: TObject);
var i: integer;
begin
i := 0;
try
i := 1 div i
//raise Exception.Create("My exception")
finally
showmessage("in block TRY..FINALLY")
end;
showmessage("Showmessage - after TRY..FINALLY");
showmessage("i = " + inttostr(i))
end;
Вроде все встало на свои места.
Это оптимизатор компилятора заклинил переменную i ? Т.е. он не хотел ни в какую делать ексепшин, если i не использовалась?
Gracias
← →
begin...end © (2004-05-18 19:06) [8]Удалено модератором
Страницы: 1 вся ветка
Текущий архив: 2004.05.30;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.039 c