Delphi有块标签吗?

时间:2013-06-19 12:33:24

标签: java delphi

在Java中我们可以做出类似的事情:

 String output = "";

 stop: {
 // count 10 lines

 for ( int row = 1; row <= 10; row++ ){
   // count 5 columns

   for ( int column = 1; column <= 5; column++ {
     if ( row == 5 )
       break stop;
     output += "* ";

     }

     output += "\n";
    }
   output += "\nTerminated Ok.";
  }

结果是10行的打印,但结束于5:

 * * * * *
 * * * * *
 * * * * *
 * * * * *
 * * * * *

是否有Delphi等价物?

1 个答案:

答案 0 :(得分:5)

Delphi不支持Java标记的中断。

请考虑以下事项:

for i := 1 to 10 do
  for j := 1 to 10 do
    if ... then break;

在Delphi中,break总是突破最内层语句,上面示例中的j for循环。

在Java中,您可以标记一个块并打破该标记的块。因此,在Java中,您可以使用带标签的中断来突破i for循环。例如:

outerloop: {
  for (int i = 1; i < 10; i++) {
    for (int j = 1; j < 10; j++) {
      if (...) break outerloop;
  }
}

德尔福无法实现这样的突破。 Delphi中最接近的等价物是可怕的goto,它仍然是considered harmful

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes;

var
  i, j: Integer;

label
  outerloopend;

begin
  for i := 1 to 10 do
  begin
    for j := 1 to 10 do
    begin
      if i>5 then
        goto outerloopend;
      Write(Format('%d,%d ', [i, j]));
    end;
    Writeln;
  end;
outerloopend:
  Writeln('Edsger Dijkstra, sorry for using goto!');
  Readln;
end.