2017-01-13 10 views
0

は、私は1つのモジュールでこのコードを持っています。12月エイダ&例外

私の質問の主なものは、私が入れていない場合です例外の本文に何が起こるのですか?

PROCEDURE Get (File: IN Ada.Text_IO.File_Type; Item : OUT Rational) IS 

N: Integer; 
D: Integer; 
Dummy: Character; 

BEGIN -- Get 
LOOP 
BEGIN 
    Ada.Integer_Text_IO.Get(File => File, Item => N); 
    Ada.Text_IO.Get (File => File, Item => Dummy); 
    Ada.Integer_Text_IO.Get(File => File, Item => D); 
    Item := N/D; 
    if Dummy /= '/' then 
    ........; 
    end if; 

EXIT; 

EXCEPTION 
    when other => 
      Ada.Text_IO.Put_Line(" here is exception "); 
    **raise;** 
END; 
END LOOP; 
END Get; 

私は起こる何であるかの例外の文の本体に昇給を入れていない場合は私の質問の主はあります?

ありがとうございました。

+0

これは、Adaに関するすべての書籍の例外に関する、または実験による章の解説を読んで答える必要があります。 –

+0

ご返信いただきありがとうございます。しかし、単に一般的な答えを知りたがっています。私はしたい関数の中でいくつかの関数を呼び出すと仮定すると、それぞれの例外が発生する可能性のあるメイン関数またはすべての中間関数で例外ハンドラを保持することをお勧めしますか? 。ありがとうございました –

+0

あなたの本が何か良いものなら、例外処理へのアプローチを説明します。どこで、いつ、どの程度、どんな種類の例外が起こるかなど。 1つのガイドラインの問題は、外側のサブプログラムが内部のサブプログラムで発生した例外を処理する方法を「知っている」かどうかです。 – B98

答えて

0

両方のコードモジュールの唯一の違いは、例外(Getの実行中に例外が発生した場合)が発生した場合、つまり例外がGetの呼び出し元に伝播することです。

これが望ましい動作であるかどうかは、必要に応じて異なります。つまり、Getの呼び出し側は例外が発生したことを知る必要がありますか?

例では、いくつかの種類の例外が発生することがあります。

  • こうして得られた(0として
  • 読み出しDが開かれていないファイルから読み取るしようとして正しい/予想入力(数字で始まらないから読み取るためのファイル)
  • を読んでいません

これらのすべては、「here is exception」と同様の方法で処理されます。 Getの最初の実装では、呼び出し元に黙ってコントロールが返されます(奇妙なことが起こったことはわかりません)。ただし、2番目の実装では、例外を再度呼び出すことによって呼び出し元に通知します。

詳細については、Ada LRM§11.3(声明を出す)を参照してください。

+0

ありがとうございます。 –

関連する問題