рассмотрит следующий DELPHI паскаль код:DELPHI: как использовать «break» вне цикла или футляра?
var
tc: TComponent
begin
{ do something to get tc }
repeat
if(tc is TDBEdit)then begin
if(check_something_about_edit(tc))then break;
do_something_else_edit(tc);
break;
end else if(tc is TBMemo) then begin
if(check_something_about_memo(tc))then break;
do_something_else_memo(tc);
break;
end;
raise exception.create('invalid component type');
until(true); {single iteration look required to use break }
Я знаю, что, вероятно, некоторые полиморфные вещи, которые я мог бы сделать с TComponent, но это не мой вопрос. Мне интересно, есть ли способ избавиться от единственного итерационного повторения-до утверждения. Без этого я не могу использовать оператор break в любом месте в блоке обработки, и мне нужно, чтобы остановить обработку в любое время.
Действительно, возможно, существует «полиморфный материал», который вы можете сделать; оба эти типа компонентов сходят с «TCustomEdit». Измените объявление 'tc' на это. –
+1. Хотя код, который вы опубликовали, является жестоким, вы были правы, чтобы спросить, как его улучшить. Всякий раз, когда у вас есть цикл, который никогда не должен выполняться более одного раза, вы делаете что-то неправильно. –