【问题标题】:Loops in ada and the implementationada中的循环和实现
【发布时间】:2010-04-23 04:44:34
【问题描述】:

下面是一段代码,对循环的实现有疑问

               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'代表什么。我猜它不是变量。'K'如何控制循环的执行?

【问题讨论】:

    标签: loops ada


    【解决方案1】:

    K 是循环的名称。 end loopExit 语句引用该名称,以明确退出哪个循环。

    Ada Reference Manual 称其为“loop_statement_identifier”。

    【讨论】:

      【解决方案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;
      

      【讨论】:

      • 呸。不要用可怕的“g-word”吓跑初学者。 exit 不比 ifloopcase 更多。
      【解决方案3】:

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

      你通常不需要命名循环,你可以说exit,它会退出封闭循环。但是,如果您有一个嵌套在另一个循环中的循环,并且您不想立即退出 exit 语句周围的那个,而是最外面的那个,那么可能需要执行类似的操作。

      【讨论】:

        【解决方案4】:

        K 是一个命名循环的标签。哇,好久没看到阿达了……

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-07-12
          • 2015-12-24
          • 1970-01-01
          • 2021-07-20
          • 1970-01-01
          • 1970-01-01
          • 2014-08-05
          相关资源
          最近更新 更多