1

以下は示されているコードの一部であり、疑問はループの実装に関するものです

               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」はループの実行をどのように制御しますか?

4

4 に答える 4

4

Kループの名前です。end loopandステートメントはそのExit名前を参照して、どのループが終了するかを明確にします。

Ada リファレンス マニュアルでは、これを「loop_statement_identifier」と呼んでいます。

于 2010-04-23T04:52:50.537 に答える
2

Kは本質的にループの名前です。はexit k、ループを停止し、ループkが終了した後に次のステートメントに進むようにコードに指示します。

通常、ループに名前を付ける必要はありません。言うことができるので、ループはexitそれを囲むループを終了します。ただし、別のループ内にネストされたループがあり、exitステートメントのすぐ周りのループではなく、最も外側のループを終了する場合は、このような操作が必要になることがあります。

于 2010-04-23T17:40:20.867 に答える
2

前述のとおり、K はループのラベルです。読みやすくするために特定のループを識別し、ネストされた囲みループのセットから特定のループを選択的に終了することもできます (つまり、「goto」...shhh! :-)

これは不自然な例です(コンパイルされていないチェック済み):

   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;
于 2010-04-23T13:03:38.673 に答える
1

K は、ループに名前を付けるラベルです。うわー、久しぶりにエイダを見ました…

于 2010-04-23T04:54:03.890 に答える