Rexx-シグナル

Rexxでは、シグナル命令は一般に2つの目的で使用されます。

  • 1つは、制御をプログラムの別の部分に移すことです。これは通常、他のプログラミング言語で使用されている頼りになるラベルのようなものです。

  • もう1つは、特定のトラップラベルに移動することです。

以下の命令コマンドのいずれかでsignalコマンドを使用すると、保留中の制御構造が自動的に非アクティブ化されます。

  • if ... then ... else..。

  • する...終了

  • do i = 1からn ... end [および同様のdoループ]

  • いつ...次に......などを選択します。そうでなければ...終わり

シグナルステートメントの一般的な構文は次のとおりです。

構文

signal labelName  
   
signal [ VALUE ] labelExpression

シグナルステートメントの使用方法の例を見てみましょう。

/* Main program */ 
n = 100.45 

if \ datatype( n, wholenumber ) then 
   signal msg 
   say 'This is a whole number' 
   return 0 
msg : 
   say 'This is an incorrect number'

上記のプログラムの出力は以下のようになります。

出力

This is an incorrect number.

次のプログラムに示すように、変数nの値を整数に変更した場合-

/* Main program */ 
n = 100 

if \ datatype( n, wholenumber ) then 
   signal msg 
   say ' This is a whole number ' 
   return 0 
msg : 
   say ' This is an incorrect number '

次の出力が得られます-

This is a whole number

次のプログラムに示すように、ラベルの値に転送することもできます-

/* Main program */ 
n = 1 

if \ datatype( n, wholenumber ) then 
   signal msg 

if n < 1 | n > 3 then 
   signal msg  
   signal value n 
   3 : say 'This is the number 3' 
   2 : say ' This is the number 2' 
   1 : say ' This is the number 1' 
   return n 
msg : 
   say ' This is an incorrect number ' 
   exit 99

上記のプログラムの出力は次のように表示されます-

This is the number 1

トラップラベル転送のアクティブ化/非アクティブ化

前述したように、シグナル命令を使用して、制御をトラップラベルに転送することもできます。

トラップラベル転送の一般的な構文は次のとおりです。

構文

signal ON conditionName [ NAME Label ] 
  
signal OFF conditionName

どこ、

  • conditionName −これは、信号をオンまたはオフにする必要がある条件です。

  • Label −プログラムの転送先となるオプションのラベル。

トラップラベル転送の使用例を見てみましょう。

/* Main program */ 
signal on error 
signal on failure 
signal on syntax 
signal on novalue 
beep(1) 
signal off error 
signal off failure 
signal off syntax 
signal off novalue 
exit 0 
error: failure: syntax: novalue: 
say 'An error has occured'

上記の例では、最初にエラー信号をオンにします。次に、エラーが発生するステートメントを追加します。次に、カスタムエラーメッセージを表示するためのエラートラップラベルがあります。

上記のプログラムの出力は次のようになります-

An error has occurred.