2010-04-23 29 views
1

,下图显示了一段代码,并怀疑是关于循环的执行循环中ADA和实施

   C := character'last; --'// SO code colorizer hack 
       I := 1; 
       K : loop 
        Done := C = character'first; --' 
        Count2 := I; 
        Exit K when Done; 
        C := character'pred(c); --' 
        I := I + 1; 
       end loop K; 

谁能告诉我这是什么“K”代表for.I猜它不是一个变量。'K'如何控制循环的执行?

回答

3

K是循环的名称。 end loopExit语句引用该名称,以清楚说明正在退出的循环。

Ada Reference Manual称之为“loop_statement_identifier”。

1

K是命名循环的标签。哇,自从我见过任何Ada之后已经很长时间了...

2

如上所述,K是循环的标签。它允许你识别一个特定的循环来提高可读性,并且还可以选择性地从一组嵌套的闭环中退出一个特定的循环(即作为“goto”...嘘!:-)

这里是一个人为的例子(未编译选中):

S : Unbounded_String; 
    F : File_Type; 
    Done_With_Line : Boolean := False; 
    All_Done  : Boolean := False; 
begin 
    Open(F, In_File, "data_file.dat"); 
    File_Processor: 
    while not End_Of_File(F) loop 
     S := Get_Line(F); 
     Data_Processor: 
     for I in 1 .. Length(S) loop 
      Process_A_Character 
       (Data_Char => Element(S, I), -- Mode in 
       Line_Done => Done_With_Line, -- Mode out 
       Finished => All_Done);  -- Mode out 

      -- If completely done, leave the outermost (file processing) loop 
      exit File_Processor when All_Done; 

      -- If just done with this line of data, go on to the next one. 
      exit Data_Processor when Done_With_Line; 
     end loop; 
    end loop File_Processor; 
    Close(F); 
end; 
+1

Bah。不要让可怕的“G字”吓到初学者。 'exit'不再是'if','loop'和'case'的转换。 – 2010-04-23 17:42:21

2

K本质上是循环的名称。 exit k告诉代码停止循环,并在循环k结束后转到下一个语句。

您通常不需要命名循环,因为您可以只说exit,它将退出封闭循环。但是,如果你有一个循环嵌套在另一个循环中,并且你不想立即退出exit语句,而是退出最后一个循环,那么可能需要这样做。